如何在iOS上读取 – 修改 – 写入PDF(CGPDFDocument)?

我正在尝试修改iOS上现有PDF的PDF元数据(标题,作者等)。 虽然很容易find用于PDFparsing和从头开始创buildPDF的示例代码,但是将现有的PDF转储到新文件似乎并不是一个简单的方法 – 只需轻微修改即可。

更具体地说,如何获得读取PDF时获得的信息大致如下:

CGPDFDocumentRef myPDF = CGPDFDocumentCreateWithURL((CFURLRef)urlOfInputPDF); CGPDFDictionaryRef myPDFDict=CGPDFDocumentGetInfo(myPDF); 

到新的PDF中,我将大致这样创build:

 CGRect pageRect; CFMutableDictionaryRef myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File")); CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name")); pdfContext = CGPDFContextCreateWithURL (urlOfOutputPDF, &pageRect, myDictionary); 

显然,字典types不匹配,并且以这种方式创build的输出是与页面(不是文档)相关的。

任何想法,我怎么可以将整个CGPDFDocumentRef复制到一个新的文件? 如何使它变得可变,所以我可以在保存之前修改元数据?

我不知道CoreGraphics的方式,而不是遍历每个页面,并打印到新的文档。 至less这就是我在PSPDFKit中所做的。 对于大文档,重新渲染整个文档是相当缓慢的。

当你这样做的时候,你也会丢失一些元数据 – 也许更直接的PDF操作是一个更好的方法 – 但是请注意,如果你直接编辑string,你需要更新PDF中的xref预告片,因为预告片是一个地图一旦添加/删除字符,字节坐标将会改变。