我将几个单独的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页时会发生什么。
pdfs包含大量图片,但我不确定这是否可以导致文件大小的增加
答案 0 :(得分:0)
这是初始化CGPDFContextCreateWithURL((CFURLRef)originalURL, NULL, NULL);
第二个参数是mediaBox
,根据Apple的说法,是
指定PDF边界的矩形。矩形的原点通常应为(0,0)。 CGPDFContextCreateWithURL函数使用此矩形作为默认页面媒体边界框。如果传递NULL,则CGPDFContextCreateWithURL使用默认页面大小8.5 x 11英寸(612 x 792点)。
如果原始文件小于此大小,则会增加,因为它会在更大的画布上绘制。通过较小的尺寸代替。
以下是参考资料的链接:CGPDFContext Reference