gpt4 book ai didi

iOS:来自多个 UIView 的单页 PDF

转载 作者:行者123 更新时间:2023-11-28 22:18:07 24 4
gpt4 key购买 nike

我编写了这段代码片段,它采用一组 UIView 并将它们呈现为 PDF。但是,每个 View 都被呈现到一个单独的页面中,因为我不知道如何合并 PDF 页面或将所有 View 呈现到一个页面中。

当前代码:

+ (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 做了什么更改, View 都会相互叠加绘制> 或者我在上下文中使用的 CGRect 大小。

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

我正在寻找一种方法来合并生成的 PDF 页面,或将我的 View 绘制到单个页面中。注意:我无法将我的 View 作为 subview 添加到公共(public)父 View 中,因为它会弄乱我的应用程序布局。理想情况下,我会这样做,但无法复制 UIView。

最佳答案

使用 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;
}

您可能还想指定适合您的 View 的页面大小。计算大小并调用 UIGraphicsBeginPDFPageWithInfo 而不是 UIGraphicsBeginPDFPage

关于iOS:来自多个 UIView 的单页 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21102980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com