0

我编写了这段代码片段,它采用一组 UIView 并将它们呈现为 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;
}

如果我只调用此行一次 -无论我对上下文进行什么更改或使用什么大小的 CGRect UIGraphicsBeginPDFPage(),视图都会被绘制在彼此之上。view.layer.frame

我对当前的图像质量很满意,不需要在 PDF 中添加任何链接或文本。

我正在寻找一种方法来合并我生成的 PDF 页面,或者将我的视图绘制到一个页面中。注意:我无法将我的视图作为子视图添加到公共父视图中,因为它会扰乱我的应用程序布局。理想情况下,我会这样做,但 UIViews 不能被复制。

4

1 回答 1

3

在渲染之间移动原点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.

于 2014-01-14T00:14:58.730 回答