gpt4 book ai didi

iPhone PDF 创建库或函数

转载 作者:行者123 更新时间:2023-12-03 21:22:45 25 4
gpt4 key购买 nike

有人知道 iPhone 上有一个开源 PDF 创建项目可以从模板生成文档(使用 Quartz)吗?或者人们是否编写了任何用于对齐等的函数?我见过 libHaru,但我知道它缺少一些关键功能。

谢谢

最佳答案

您可以使用 PDF 文件创建 Quartz 上下文作为渲染目标,然后简单地在其中进行绘制。例如,以下代码将在 NSData 对象中创建一个 PDF 文件,然后您可以将其附加到电子邮件或保存到磁盘:

NSMutableData *pdfData = [[NSMutableData alloc] init];
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfData);
const CGRect mediaBox = CGRectMake(0.0f, 0.0f, drawingWidth, drawingHeight);
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &mediaBox, NULL);

UIGraphicsPushContext(pdfContext);
CGContextBeginPage(pdfContext, &mediaBox);

// Draw your content here

CGContextEndPage(pdfContext);
CGPDFContextClose(pdfContext);
UIGraphicsPopContext();

CGContextRelease(pdfContext);
CGDataConsumerRelease(dataConsumer);

这里发生了一些事情。首先,我们创建一个 NSMutableData 实例并将其设置为数据使用者(PDF 上下文写入的目的地)。由于 Core Graphics 使用 Core Foundation 类型,而不是 Cocoa 类,因此 CGDataConsumerCreateWithCFData() 需要 CFMutableDataRef 参数。我们可以简单地将我们创建的 NSMutableData 类转换为此类型,因为 NSData 是一个免费的桥接类。这意味着它可以在 Cocoa 方法或 Core Foundation 函数中使用,而无需在类型之间进行转换。

之后,我们使用之前设置的数据使用者设置 PDF 上下文的页面大小(以磅为单位)并创建 PDF 上下文。然后,我们使用 UIGraphicsPushContext() 使其成为绘图的事件上下文。

在本例中,我们仅在正在绘制的 PDF 中创建单个页面,因此我们开始页面、绘制,然后结束页面。如果您想制作多个页面,则可以对每个页面重复此操作。

请注意,所有这些绘图都将在 Quartz 坐标空间中完成,因此,如果您已将绘图例程设置为在 iPhone View 中正确显示,则它将在此处翻转。为了抵消这种翻转,您可以将以下代码放入绘图代码中(在 UIGraphicsPushContext() 之后):

CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);

关于iPhone PDF 创建库或函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229414/

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