iPhone PDF 创建库或函数

标签 iphone pdf-generation

有人知道 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/

相关文章:

iphone - 创建我自己的 iTunes 图稿

iphone - 打字时键盘挡住屏幕

ios - 在 Swift 中的代码中向 iOS 应用程序添加启动屏幕(没有 Storyboard或启动板)

php - 在浏览器中查看PDF而无需下载(类似gmail附件)

iphone - 使用 UIAppearance 时 UIBarButtonItem 的奇怪行为

php - 在 PHP 中使用 DOMPDF 的 PDF 页面中的页眉

Delphi 6 OleContainer SaveAsDocument 在 Windows 7/Word 2010 中创建损坏的文件,在 XP/Word 2003 中正常

java - 使用itextpdf提取的英文文本看不懂

asp.net - 使用 ASP.NET 生成打印质量 PDF

iphone - 如何将此类数据显示到 UITableview