2009-12-21 10 views
10

Ich benutze iTextSharp, um mehrere PDF-Dateien zu einer einzigen Datei zusammenzuführen.Wie man bereits ausgefüllte PDF-Formulare mit iTextSharp glättet

Ich benutze Methode beschrieben in iTextSharp offiziellen Tutorials, specifically here, die Dateien Seite für Seite über PdfWriter und PdfImportedPage zusammenführt.

Stellt heraus, dass einige der Dateien, die ich zusammenführen muss, ausgefüllte PDF-Formulare sind, und diese Methode zum Zusammenführen von Formulardaten ist verloren.

Ich habe einige Beispiele für die Verwendung von PdfStamper zum Ausfüllen von Formularen und zum Abflachen von Formularen gesehen.

Was ich nicht finden kann, ist eine Möglichkeit, das bereits ausgefüllte PDF-Formular zu glätten und es hoffentlich mit den anderen Dateien zu verschmelzen, ohne es zuerst zu verflachen.

Dank

+0

wuff ... Sie ein Problem haben. .. – Jason

+0

dies könnte jemand anderem helfen, da ich ein Problem hatte, wo freier Text nicht abgeflacht wurde, in dem iTextSharp eine separate Einstellung dafür hat: 'stamper.FreeTextFlattening = true;' – jtate

Antwort

6

Just Einstellung .FormFlattening auf PdfStamper war nicht ganz genug ... Ich endete mit einem PdfReader mit Byte-Array von Datei-Inhalten, die ich verwendet, um die Daten zu stempeln/flattern, um die Byte-Array zu bekommen neuer PdfReader. Unten ist, wie ich es gemacht habe. funktioniert jetzt großartig.

private void AppendPdfFile(FileDTO file, PdfContentByte cb, iTextSharp.text.Document printDocument, PdfWriter iwriter) 
    { 
    var reader = new PdfReader(file.FileContents); 

    if (reader.AcroForm != null) 
     reader = new PdfReader(FlattenPdfFormToBytes(reader,file.FileID)); 

    AppendFilePages(reader, printDocument, iwriter, cb); 
    } 

    private byte[] FlattenPdfFormToBytes(PdfReader reader, Guid fileID) 
    { 
    var memStream = new MemoryStream(); 
    var stamper = new PdfStamper(reader, memStream) {FormFlattening = true}; 
    stamper.Close(); 
    return memStream.ToArray(); 
    } 
+0

Danke, das hat mir mit einem ähnlichen geholfen Problem. – Tigran

8

Wenn die Dateien zu schaffen verschmolzen werden, ich diese Einstellung geändert: pdfStamper.FormFlattening = true;

Funktioniert sehr.

3

ich denke, das Problem mit diesem gleich ist: AcroForm values missing after flattening

auf die Antwort Basierend dies den Trick tun sollten:

pdfStamper.FormFlattening = true; 
pdfStamper.AcroFields.GenerateAppearances = true; 
+0

Diese einfache Änderung des Hinzufügens von 'pdfStamper.AcroFields.GenerateAppearances = true;' hat auch funktioniert. Viel einfacher als die andere Byte-Array-Lösung. – FirstDivision

Verwandte Themen