2012-12-04 2 views
0

나는 여러 pdfs (심지어 1000+ 이상)를 가져 와서 하나의 pdf로 병합하는 프로그램을 가지고있다.iTextSharp pdf 병합 스풀 문제

프로그램이 완벽하게 작동하지만 스풀 오류가 발생했습니다.

합병 된 pdf를 Acrobat으로 열고 인쇄하는 경우 n 페이지의 단일 스풀을 프린터로 보내는 대신 원래의 pdfs 수만큼 스풀을 보내 프린터의 처리 속도가 매우 느립니다. 둘째 판 -

이것은 액션이 iText의 Chapter 6를 다운로드하십시오 클래스

Document document = new Document (iTextSharp.text.PageSize.A4); 
PdfWriter writer = PdfWriter.GetInstance (document, new FileStream (outputFilename, FileMode.Create)); 
writer.SetFullCompression();    
document.Open(); 
PdfContentByte cb = writer.DirectContent; 

foreach(var file in files) { 
PdfReader reader = new PdfReader (file); 
int n = reader.NumberOfPages; 
int i = 0; 
while (i < n) 
{ 
    i++; 
    document.SetPageSize (reader.GetPageSizeWithRotation (i));     
    document.NewPage(); 
    page = writer.GetImportedPage (reader, i); 
    rotation = reader.GetPageRotation (i);   
    cb.AddTemplate (page, 1f, 0, 0, 1f, 0, 0); 
} 
} 

document.Close(); 

답변

1

의 추상이다. 잘못된 클래스를 사용하여 PDF를 연결하는 것을 알 수 있습니다. 나는 이것을 반복해서 반복했는데, Pdf(Smart)Copy 대신에 PdfWriter을 사용하여 무엇을 PDF로 연결했는지 알고 싶습니다. 사이트의 어딘가에서 코드 샘플을 찾았습니까? 그렇다면 저에게 그 페이지의 저자를 모으기 위해 알려주십시오!

코드 샘플을 사용하는 경우 페이지를 XObject로 가져옵니다. 이렇게하면 중첩 수준에 한계가 있으므로 문제가 발생할 수있는 중첩 수준이 추가됩니다. 또한 페이지 뒤의 페이지를 PdfWriter에 추가 할 때 PDF에 너무 많은 중복 정보가 포함되어 파일이 부 풀릴 위험이 있습니다. 이는 PdfSmartCopy을 사용하여 피할 수 있습니다.

마지막으로 (책에없는 내용) PdfReader 개체의 모든 페이지를 복사 한 후에 FreeReader() 메서드를 사용해야합니다. 이렇게하면 코드 속도가 크게 빨라지고 필요한 메모리가 줄어 듭니다.

다른 스풀이 프린터로 전송되는 이유를 위의 어느 것도 설명하지 않지만 먼저 코드에서 명백한 결함으로 시작한 다음 그곳에서 가져와 봅시다.

+0

힌트 감사합니다. 이외에도, 그것은 스풀 문제도 해결합니다.). 나는이 코드를 몇 년 동안 사용했는지는 기억이 나지 않지만 더 이상 PdfWriter를 사용하지 않을 것이라는 점을 잘 알고있다. D –