我正在尝试修改iOS上现有PDF的PDF元数据(标题,作者等)。 虽然从头开始很容易找到PDF解析和PDF创建的示例代码,但似乎没有一种简单的方法可以将现有PDF转储到新文件中 - 并且只是略微修改它。
更具体地说,如何在阅读PDF时获得的信息大致如下:
CGPDFDocumentRef myPDF = CGPDFDocumentCreateWithURL((CFURLRef)urlOfInputPDF);
CGPDFDictionaryRef myPDFDict=CGPDFDocumentGetInfo(myPDF);
进入新PDF,我将大致以这种方式创建:
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);
显然,字典类型不匹配,以这种方式创建的输出与页面(非文档)相关。
任何想法,如何将整个CGPDFDocumentRef复制到新文件中?以及如何使它变得可变,所以我可以在保存之前修改元数据?
答案 0 :(得分:1)
不要使用CGPDFDocument
(核心图形);请改用PDFDocument
(PDFKit)。这为这种事提供了更简单的方法。
writeToFile:withOptions
方法可让您将PDF保存到新文件,在字典中指定DOCINFO数据。
答案 1 :(得分:0)
我不知道使用CoreGraphics的方法,而不是迭代每个页面并将它们打印到新文档中。至少那是我在PSPDFKit中所做的。对于较大的文档,重新呈现整个文档非常慢。
当你走这条路时你也会丢失一些元数据 - 也许更直接地操纵PDF是一种更好的方法 - 但是请注意,如果直接编辑字符串,你需要更新PDF中的外部参考预告片,因为预告片是一个字节坐标的地图,一旦你添加/删除字符就会改变。