2010-03-24 4 views
15

나는 아주 간단 할 것이라고 생각하는 것을 시도하고있다. 그러나 그것은 그렇게 간단하지 않고 구글도 도움이되지 못했다.iTextSharp를 사용하여 PDF에 빈 페이지를 추가하는 방법은 무엇입니까?

PDF 문서 (문자)를 병합하기 위해 iTextSharp를 사용하고 있습니다. 그래서 모두 한번에 인쇄 할 수 있습니다. 편지에 홀수 개의 페이지가 있으면 빈 페이지를 추가해야하므로 양면 인쇄가 가능합니다. 내가 사용 시도

// initiaise 
MemoryStream pdfStreamOut = new MemoryStream(); 
    Document document = null; 
    MemoryStream pdfStreamIn = null; 
    PdfReader reader = null; 
    int numPages = 0; 
    PdfWriter writer = null; 


for int(i = 0;i < letterList.Count; i++) 
{ 
    byte[] myLetterData = ...; 
    pdfStreamIn = new MemoryStream(myLetterData); 
    reader = new PdfReader(pdfStreamIn); 
    numPages = reader.NumberOfPages; 

    // open the streams to use for the iteration 
    if (i == 0) 
    { 
     document = new Document(reader.GetPageSizeWithRotation(1)); 
     writer = PdfWriter.GetInstance(document, pdfStreamOut); 
     document.Open(); 
    } 

    PdfContentByte cb = writer.DirectContent; 
    PdfImportedPage page; 

    int importedPageNumber = 0; 
    while (importedPageNumber < numPages) 
    { 
     importedPageNumber++; 
     document.SetPageSize(reader.GetPageSizeWithRotation(importedPageNumber)); 
     document.NewPage(); 
     page = writer.GetImportedPage(reader, importedPageNumber); 
     cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); 
    } 
} 

:

document.SetPageSize(reader.GetPageSizeWithRotation(1)); 
    document.NewPage(); 

홀수에 대한 루프의 끝에 여기

는 모든 문자를 병합 내가 지금 가지고있는 기본적인 코드입니다 성공하지 못한 페이지의 수.

답변

28

그럼 거의 다 왔어. 이 문서는 무언가를 넣기 전까지 실제로 페이지를 만들지 않으므로 빈 테이블 bam을 추가하자마자! 그것은 효과가있다! 여기

내가 병합하고있는 문서 페이지의 홀수가있는 경우 빈 페이지를 추가합니다 코드입니다 :

if (numPages > 0 && numPages % 2 == 1) 
{ 
    bool result = document.NewPage(); 
    document.Add(new Table(1)); 
} 

이 최신 버전에서 작동하지 않는 경우를 대신 이것을 시도 :

document.Add(new Chunk()); 
+3

테이블을 추가해도 작동하지 않습니다. 어쩌면 ITextSharp의 최신 버전 때문일 수 있습니다. 'Add (new Chunk());는 나를 위해 일했다. – Crispy

+0

업데이트 해 주셔서 감사합니다. :) – Russell

+0

최신 버전에서는 테이블 대신'Chunk'를 추가해야한다는 것을 확인할 수 있습니다. 완벽하게 일했습니다! –

1

성공적으로 작동하는 또 다른 방법입니다.

if (numPaginas % 2 != 0) 
      { 
       documentoPdfUnico.SetPageSize(leitorPdf.GetPageSizeWithRotation(1)); 
       documentoPdfUnico.NewPage(); 
       conteudoPdf.AddTemplate(PdfTemplate.CreateTemplate(escritorPdf, 2480, 3508), 1f, 0, 0, 1f, 0, 0); 
      } 
관련 문제