我编写了这段代码片段,它接受了一系列UIViews并将它们呈现为PDF。但是,每个视图都被渲染到一个单独的页面中,因为我无法弄清楚如何合并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的大小如何,视图都会相互叠加。< / p>
我对当前的图像质量感到满意,不需要在PDF中添加任何链接或文本。
我正在寻找一种方法来合并我生成的PDF页面,或者将我的视图绘制到单个页面中。注意:我无法将我的视图作为子视图添加到公共父视图中,因为它会弄乱我的应用程序布局。理想情况下,我会这样做,但UIViews无法复制。
答案 0 :(得分: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
。