2014-01-13 50 views
0

我寫了這段代碼片段,它接受一個UIViews數組並將它們呈現爲PDF。但是,每個視圖都被渲染爲一個單獨的頁面,因爲我無法弄清楚如何合併PDF頁面或將所有視圖渲染爲單個頁面。iOS:來自多個UIViews的單頁PDF

當前代碼:

+ (NSData*)pdfFromViews:(NSArray*)views 
{ 
    NSMutableData* pdf = [NSMutableData data]; 

    UIGraphicsBeginPDFContextToData(pdf, CGRectZero, nil); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    for(UIView* view in views) 
    { 
     UIGraphicsBeginPDFPageWithInfo(view.bounds, nil); 
     [view.layer renderInContext:context]; 
    } 

    UIGraphicsEndPDFContext(); 

    return pdf; 
} 

如果我只把這個行一次 - UIGraphicsBeginPDFPage() - 觀點繪製在彼此的頂部,無論我做什麼更改view.layer.frame或的CGRect我用什麼尺寸爲我的上下文。

我很滿意當前的圖像質量,不需要在PDF中添加任何鏈接或文本。

我正在尋找一種方法來合併生成的PDF頁面,或將我的視圖繪製到單個頁面中。注意:我無法將我的視圖作爲子視圖添加到常見父視圖中,因爲它會弄亂我的應用程序佈局。理想情況下,我會這樣做,但不能複製UIViews。

回答

2

移呈現的淵源與CGContextTranslateCTM

+ (NSData*)pdfFromViews:(NSArray*)views { 
    NSMutableData* pdf = [NSMutableData data]; 
    UIGraphicsBeginPDFContextToData(pdf, CGRectZero, nil); 
    UIGraphicsBeginPDFPage(); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    for(UIView *view in views) { 
     [view.layer renderInContext:context]; 
     CGContextTranslateCTM(context, 0, view.bounds.size.height); 
    } 

    UIGraphicsEndPDFContext(); 
    return pdf; 
} 

您可能還需要指定一個適合您的視圖的頁面大小。計算尺寸並致電UIGraphicsBeginPDFPageWithInfo而不是UIGraphicsBeginPDFPage

+0

這樣做的竅門,謝謝! –