2010-03-24 13 views
15

Ich versuche etwas zu tun, von dem ich dachte, es wäre ganz einfach, aber es ist nicht so geradlinig und Google hat nicht geholfen.Wie füge ich eine leere Seite mit iTextSharp zu einem PDF hinzu?

Ich verwende iTextSharp, um PDF-Dokumente (Buchstaben) zusammenzuführen, so dass sie alle gleichzeitig gedruckt werden können. Wenn ein Buchstabe eine ungerade Anzahl von Seiten hat, muss ich eine leere Seite anhängen, damit wir die Buchstaben doppelseitig drucken können. Hier

ist die Grundcode I im Moment für alle Buchstaben verschmelzenden:

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

habe ich versucht, unter Verwendung von:

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

am Ende der for-Schleife für eine ungerade Anzahl der Seiten ohne Erfolg.

Antwort

28

Nun, ich war fast da. Das Dokument erstellt die Seite erst dann, wenn Sie etwas darauf gelegt haben, also sobald ich eine leere Tabelle hinzugefügt habe, bam! Es funktionierte!

Hier ist der Code, der eine leere Seite, wenn das Dokument, das ich verschmelzenden bin eine ungerade Anzahl von Seiten hinzufügen wird:

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

Wenn dies nicht funktioniert, in neueren Versionen, versuchen Sie stattdessen:

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

Das Hinzufügen einer Tabelle funktionierte nicht für mich. Vielleicht aufgrund einer neueren Version von ITextSharp. 'Add (new Chunk());' hat für mich funktioniert. – Crispy

+0

Danke für das Update - das war schon eine Weile her. :) – Russell

+0

Ich kann bestätigen, dass für eine neuere Version Sie ein 'Chunk' anstelle einer Tabelle hinzufügen sollten. Arbeitete perfekt! –

1

Eine andere Alternative, die erfolgreich funktioniert.

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