我合并几个单一的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