【发布时间】:2010-12-24 06:57:33
【问题描述】:
在我的 iPhone 应用程序中,我有几个数据项。我想使用这些数据项生成 PDF 文件并将 PDF 文件附加到电子邮件中。据我所知,我需要使用 Quartz 2D 来绘制 PDF 文件。 有没有关于绘制 PDF 的示例代码或建议?
【问题讨论】:
-
这个Apple Guide 有一个你想要的代码示例。
在我的 iPhone 应用程序中,我有几个数据项。我想使用这些数据项生成 PDF 文件并将 PDF 文件附加到电子邮件中。据我所知,我需要使用 Quartz 2D 来绘制 PDF 文件。 有没有关于绘制 PDF 的示例代码或建议?
【问题讨论】:
以下是我用来生成包含某些 Quartz 图形的 PDF 表示的 NSData 对象的内容:
NSMutableData *pdfData = [[NSMutableData alloc] init];
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfData);
const CGRect mediaBox = CGRectMake(0.0f, 0.0f, self.bounds.size.width, self.bounds.size.height);
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &mediaBox, NULL);
UIGraphicsPushContext(pdfContext);
CGContextBeginPage(pdfContext, &mediaBox);
// Your Quartz drawing code goes here
CGContextEndPage(pdfContext);
CGPDFContextClose(pdfContext);
UIGraphicsPopContext();
CGContextRelease(pdfContext);
CGDataConsumerRelease(dataConsumer);
然后您可以将此 PDF 数据保存到磁盘或将其作为附件添加到您的电子邮件中,记住在完成后将其释放。
【讨论】:
这是 CGPDF 函数的一个很好的(工作)示例:http://www.olivetoast.com/blog/hamish/simple_uiscrollview_catiledlayer_example.ot
它使用 CATiledLayer + UIScrollView,这可能不适合某种读者,但它仍然向您展示了如何在没有 UIWebView 的情况下加载和绘制 PDF 文档(这严重限制了您的能力)。
将图层类型改回图层,使用 CGPDFDocumentGetNumberOfPages 添加页面处理,然后使用 CGPDFDocumentGetPage,您就有了一个非常好的阅读器。
我不知道如何执行注释,我怀疑您需要在文档之上拥有自己的数据结构。
【讨论】: