簡體   English   中英

如何在iOS上閱讀 - 修改 - 編寫PDF(CGPDFDocument)?

[英]How can I read-modify-write a PDF (CGPDFDocument) on iOS?

我正在嘗試修改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復制到一個新文件? 以及如何使它變得可變,所以我可以在保存之前修改元數據?

不要使用CGPDFDocument (核心圖形); 請改用PDFDocument (PDFKit)。 這為這種事提供了更簡單的方法。

writeToFile:withOptions方法允許您將PDF保存到新文件,在字典中指定DOCINFO數據。

我不知道CoreGraphics的方法,而不是迭代每個頁面並將它們打印到新文檔中。 至少那是我在PSPDFKit中所做的。 對於較大的文檔,重新呈現整個文檔非常慢。

當你走這條路時你也會丟失一些元數據 - 也許更直接地操縱PDF是一種更好的方法 - 但是請注意,如果你直接編輯字符串,你需要更新PDF中的外部預告片,因為預告片是一張地圖字節坐標,一旦添加/刪除字符就會改變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM