2016-06-08 10 views
0

하나의 파일에 여러 개의 단일 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); 

병합 이후에 일어나는 이상한 일이 최종 문서가 결합 된 모든 단일 페이지의 파일 크기보다 파일 크기가 매우 큰 것입니다. 여기

4 페이지 파일 크기가 10메가바이트 이상하지만 결합 된 파일 크기가 1.58 메가 후 내 디버그 출력

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 

당신이 볼 수 있듯이,의 일부. 100 페이지가 병합 될 때 어떤 일이 일어나는 지 상상할 수 있습니다.

PDF 파일 이미지를 많이 포함하고 있지만 파일 크기 등의 증가에 대한 책임을 질 수 있는지

답변

0

이것은 당신이 CGPDFContextCreateWithURL((CFURLRef)originalURL, NULL, NULL);

두 번째 매개 변수를 초기화하는 방법의 결과입니다 확실하지 않다 mediaBox입니다. Apple에 따르면,

PDF의 범위를 지정하는 직사각형입니다. 사각형의 원점은 일반적으로 (0,0)이어야합니다. CGPDFContextCreateWithURL 함수는이 사각형을 기본 페이지 미디어 경계 상자로 사용합니다. NULL을 전달하면 CGPDFContextCreateWithURL은 8.5 x 11 인치 (612 x 792 포인트)의 기본 페이지 크기를 사용합니다.

원본 파일이이 크기보다 작 으면 더 큰 캔버스에 그려지기 때문에 파일 크기가 커집니다. 대신 작은 크기로 전달하십시오. 여기

은 기준에 대한 링크입니다 : 대답에 대한 CGPDFContext Reference

+0

감사하지만 불행히도 그것은 문제가되지 않습니다. 테두리 상자는 두 문서에서 동일합니다. 이 질문을 게시 한 후, 나는 이것을 발견했다. http://stackoverflow.com/questions/3099312/why-does-combining-pdf-pages-with-cgcontextdrawpdfpage-create-very-large-output @qwzybug는 그 CGPDFContext를 지적한다. jpgs를 원시 비트 맵으로 변환합니다. 나는 아직 이것에 대한 확인을 찾지 못했지만 설명이 될 것입니다. 그런데 어떻게 해결할 수 있을지 모르겠습니다. – MatzeLoCal

+0

오, 그래도 해상도 문제 일 수 있다고 생각합니다. 해상도를 줄이는 방법을 찾으십시오. – Anton