我合併幾個單一的pdf頁到單個文件。合併本身很好。所有頁面都在正確的位置,它們看起來是正確的。PDF合併越來越多的文件大小
合併代碼如下所示:
CGContextRef writeContext = CGPDFContextCreateWithURL((CFURLRef)originalURL, NULL, NULL);
for(NSURL * pdfCacheURL in pdfURLs) {
singlePDFDocumentRef = CGPDFDocumentCreateWithURL((CFURLRef)pdfCacheURL);
pdfPage = CGPDFDocumentGetPage(singlePDFDocumentRef, 1);
mediaBox = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);
CGContextBeginPage(writeContext, &mediaBox);
CGContextDrawPDFPage(writeContext, pdfPage);
CGContextEndPage(writeContext);
CGPDFPageRelease(pdfPage);
}
CGPDFContextClose(writeContext);
CFRelease(writeContext);
合併後,這種情況發生的奇怪的是,最終的文檔是比所有單頁合併的文件大小的文件大小非常大。
這裏我調試輸出
Processing Page: 1
File Size before merge:: 0.000000 mb
Single page length: 0.758951 mb
File Size after merge: 6.172294 mb
Processing Page: 2
File Size before merge: 6.172294 mb
Single page length: 0.262792 mb
File Size after merge: 6.722573 mb
Processing Page: 3
File Size before merge:: 6.722573 mb
Single page length: 0.215380 mb
File Size after merge: 8.150043 mb
Processing Page: 4
File Size before merge:: 8.150043 mb
Single page length: 0.346910 mb
File Size after merge: 10.788255 mb
正如你所看到的,後4頁的文件大小爲10兆字節,但合併後的文件大小爲1.58兆的一部分。你可以想象當100頁合併時會發生什麼。
PDF文件包含大量的圖片,但我不知道這可能是負責這種增加文件大小
感謝您的回答,但不幸的是,這不是問題。兩個文檔上的邊界框相同。 發佈此問題後,我發現這個http://stackoverflow.com/questions/3099312/why-does-combining-pdf-pages-with-cgcontextdrawpdfpage-create-very-large-output 其中@qwzybug指出,CGPDFContext會將jpgs轉換爲原始位圖。我還沒有找到確認,但這將是一個解釋。 但後來不知道我怎麼能解決這個問題。 – MatzeLoCal
噢好吧,所以我想這可能是一個解決問題。也許試圖找到一種方法來降低分辨率 – Anton