2010-03-24 10 views
15

Estoy tratando de hacer algo que pensé sería bastante simple, sin embargo, no es tan sencillo y Google no ha ayudado.¿Cómo agregar una página en blanco a un pdf usando iTextSharp?

Estoy utilizando iTextSharp para combinar documentos PDF (letras) juntos para que puedan imprimirse todos a la vez. Si una letra tiene un número impar de páginas, necesito adjuntar una página en blanco, para que podamos imprimir las letras a doble cara.

Aquí es el código básico que tengo en el momento de la fusión de todas las letras:

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

He intentado usar:

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

al final del bucle para un extraño cantidad de páginas sin éxito

Respuesta

28

Bueno, ya casi estaba allí. El documento en realidad no creará la página hasta que pongas algo, así que tan pronto como agregué una tabla vacía, ¡bam! ¡Funcionó!

Este es el código que agregará una página en blanco si el documento que estoy fusionando tiene un número impar de páginas:

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

Si esto no funciona en las versiones más nuevas, probar este lugar:

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

Agregar una tabla no funcionó para mí. Tal vez debido a una versión más nueva de ITextSharp. 'Add (new Chunk());' funcionó para mí. – Crispy

+0

Gracias por la actualización, esto fue hace bastante tiempo. :) – Russell

+0

Puedo confirmar que para la versión más reciente debe agregar un 'Chunk' en lugar de una tabla. Funcionó a la perfección! –

1

Otra alternativa que funciona correctamente.

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