首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGPDFContext和CGPDFDocument之间的关系是什么?

CGPDFContext和CGPDFDocument之间的关系是什么?
EN

Stack Overflow用户
提问于 2014-04-05 14:45:54
回答 1查看 917关注 0票数 3

我对此的理解是,也许CGPDFContext用于编辑PDF文档数据,而CGPDFDocument用于存储数据,因为文档没有列出任何更改CGPDFDocument内容的方法。

我也不太清楚CGDataConsumer/Provider做了什么。通过阅读文档,我得到了这样的印象:消费者/提供者抽象出CG对象和它所写的CFData之间的关系;所以我不需要自己去做。因此,我认为下面的代码将创建一个两页空白的PDFdocument:

代码语言:javascript
复制
//Don't know exactly how large a PDF is so I gave it 1 MB for now
self->pdfData = CFDataCreateMutable(kCFAllocatorDefault, 1024);

self->consumerRef = CGDataConsumerCreateWithCFData(self->pdfData);

self.pdfRef = CGPDFContextCreate(self->consumerRef, NULL, NULL);
CGPDFContextBeginPage(self.pdfRef, NULL); //Creates a blank page?
CGPDFContextEndPage(self.pdfRef);
CGPDFContextBeginPage(self.pdfRef, NULL); //Creates a second blank page?
CGPDFContextEndPage(self.pdfRef);

//Copies the data from pdfRef's consumer into docRef's provider?
self.docRef = CGPDFDocumentCreateWithProvider( 
CGDataProviderCreateWithCFData(
CFDataCreateCopy(kCFAllocatorDefault, self->pdfData)
));

但是它没有工作,NSLogging -- docRef的前两页--返回NULL。我在这方面很新,尤其是C层。有人能向我解释一下CGPDFContext,CGPDFDocument,CGDataConsumer & CGDataProvider之间的关系,以及我如何用它们来创建一个空白PDF吗?

EN

回答 1

Stack Overflow用户

发布于 2014-04-23 14:56:44

据我所见,你的基本理解是正确的:

  • CGPDFContext是一个绘图上下文,它“将”绘制到其上的所有内容转换为PDF指令(通常用于存储在一个PDF文件中)。
  • CGPDFDocument用于打开现有的PDF文件并从中获取信息。

当您想要创建自己的PDF文件时,您有两种方法来完成它,如下所述:https://developer.apple.com/library/mac/documentation/graphicsimaging/reference/CGPDFContext/Reference/reference.html

  1. 使用"CGPDFContextCreate“来传递数据使用者。数据使用者获取数据,并可以随心所欲地处理数据(例如,您可以创建一个将PDF传递到剪贴板的数据使用者)。
  2. 使用"CGPDFContextCreateWithURL“来传递URL。在这种情况下,您的数据将被写入该URL的PDF文件。

如果您想要使用这些函数,请看一下这个页面ref/doc/uid/TP30001066-CH214-TPXREF101,它详细解释了如何使用数据提供程序创建PDF文件,而不是(简单地)创建PDF文件。

为了弄清楚正在发生什么,我首先尝试将一个简单的PDF文件写入磁盘,然后将一个文件写入数据提供程序,然后立即使用该数据提供程序再次读取它。但是,在不尝试代码的情况下,请允许我指出,您没有使用"CGPDFContextClose“,这在文档中被描述为关闭PDF文档并将所有信息刷新到输出。实际上,您可能会遇到这样一种情况,即有些东西是缓存的,还没有写入数据提供程序,仅仅是因为您没有强制这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22882339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档