2010-03-24 3 views
15

J'essaie de faire quelque chose que je pensais être assez simple, mais ce n'est pas si simple et google n'a pas aidé. J'utilise iTextSharp pour fusionner des documents PDF (lettres) ensemble afin qu'ils puissent tous être imprimés en même temps. Si une lettre a un nombre impair de pages, j'ai besoin d'ajouter une page vierge, afin que nous puissions imprimer les lettres recto-verso.Comment ajouter une page blanche à un pdf en utilisant iTextSharp?

Voici le code de base que j'ai au moment de la fusion de toutes les lettres:

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

J'ai essayé d'utiliser:

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

à la fin de la boucle pour une étrange nombre de pages sans succès.

Répondre

28

Eh bien j'étais presque là. Le document ne créera pas réellement la page jusqu'à ce que vous mettiez quelque chose dessus, donc dès que j'ai ajouté une table vide, bam! Ça a marché!

Voici le code qui va ajouter une page blanche si le document que je suis la fusion a un nombre impair de pages:

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

Si cela ne fonctionne pas dans les versions plus récentes, essayez ceci:

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

Peut-être en raison d'une version plus récente de ITextSharp. 'Add (new Chunk()),' travaillé pour moi. – Crispy

+0

Merci pour la mise à jour - c'était il y a un bon moment. :) – Russell

+0

Je peux confirmer que pour une version plus récente, vous devez ajouter un 'Chunk' au lieu d'une table. Travaillé parfaitement! –

1

Une autre alternative qui fonctionne avec succès. Ajouter une table n'a pas fonctionné pour moi.

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