2010-03-24 26 views
15

Tôi đang cố gắng làm điều gì đó tôi nghĩ sẽ khá đơn giản, tuy nhiên nó không phải là quá thẳng về phía trước và google đã không giúp đỡ.Làm cách nào để thêm trang trắng vào pdf bằng iTextSharp?

Tôi đang sử dụng iTextSharp để hợp nhất các tài liệu PDF (chữ cái) với nhau để chúng có thể được in cùng một lúc. Nếu một chữ cái có số trang lẻ tôi cần phải thêm một trang trống, vì vậy chúng tôi có thể in các chữ cái hai mặt.

Đây là mã cơ bản tôi có vào lúc này cho việc sáp nhập tất cả các chữ cái:

// 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); 
    } 
} 

Tôi đã cố gắng sử dụng:

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

ở phần cuối của vòng lặp for cho một số lẻ số trang không thành công.

Trả lời

28

Tôi gần như đã ở đó. Tài liệu sẽ không thực sự tạo trang cho đến khi bạn đặt một thứ gì đó lên đó, vì vậy ngay sau khi tôi thêm một bảng trống, bam! Nó đã làm việc!

Dưới đây là đoạn code mà sẽ thêm một trang trống nếu tài liệu tôi đang sáp nhập có một số lẻ của các trang:

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

Nếu điều này không làm việc trong các phiên bản mới hơn, hãy thử này để thay thế:

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

Thêm bảng không hoạt động đối với tôi. Có thể do phiên bản mới hơn của ITextSharp. 'Add (new Chunk());' làm việc cho tôi. – Crispy

+0

Cảm ơn bạn đã cập nhật - cách đây khá lâu. :) – Russell

+0

Tôi có thể xác nhận rằng đối với phiên bản mới hơn, bạn nên thêm 'Chunk' thay vì một bảng. Làm việc hoàn hảo! –

1

Một giải pháp thay thế khác hoạt động thành công.

if (numPaginas % 2 != 0) 
      { 
       documentoPdfUnico.SetPageSize(leitorPdf.GetPageSizeWithRotation(1)); 
       documentoPdfUnico.NewPage(); 
       conteudoPdf.AddTemplate(PdfTemplate.CreateTemplate(escritorPdf, 2480, 3508), 1f, 0, 0, 1f, 0, 0); 
      } 
Các vấn đề liên quan