PDF合并正在增加文件大小

时间:2016-06-08 21:26:02

标签: ios pdf cgpdfdocument cgpdfcontext

我将几个单独的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包含大量图片,但我不确定这是否可以导致文件大小的增加

1 个答案:

答案 0 :(得分:0)

这是初始化CGPDFContextCreateWithURL((CFURLRef)originalURL, NULL, NULL);

的方式的结果

第二个参数是mediaBox,根据Apple的说法,是

  

指定PDF边界的矩形。矩形的原点通常应为(0,0)。 CGPDFContextCreateWithURL函数使用此矩形作为默认页面媒体边界框。如果传递NULL,则CGPDFContextCreateWithURL使用默认页面大小8.5 x 11英寸(612 x 792点)。

如果原始文件小于此大小,则会增加,因为它会在更大的画布上绘制。通过较小的尺寸代替。

以下是参考资料的链接:CGPDFContext Reference