2009-04-23 11 views
4

Ich habe ein PDF mit einem Acroform. Ich verwende iText, um dieses PDF zu öffnen und die Formularfelder mit einigen Daten zu füllen. Manchmal muss ich mehr Seiten generieren als das Original-PDF. Zu tun, dass ich eine Seite erstellen und ersetzen mit einer bestehenden Seite mit diesem Code:Wie kopiert man ein AcroForm mit iText?

OutputStream output = new FileOutputStream("C:\\newFile.pdf"); 
    PdfStamper stamper = PdfHelper.openPdfStamper("C:\\template.pdf", output); 
    stamper.insertPage(NEW_PAGE_NUMBER, new Rectangle(0,0)); 
    stamper.replacePage(stamper.getReader(), EXISTING_PAGE_NUMBER, NEW_PAGE_NUMBER); 

dies tun, werden die Felder in der bestehenden Seite werden nicht auf die neue Seite kopiert.

Ist dies eine gute Möglichkeit, eine neue Seite hinzuzufügen? (die neue Seite muss einer vorhandenen Seite entsprechen)

Wie werden die Formularfelder in die neue Seite kopiert? Wie ändere ich den Namen der neuen Formularfelder, damit es keine doppelten Felder gibt?

EDIT: Die Seite, die ich kopieren möchte, hat eine Tabelle. Aber diese Tabelle hat nur zehn Zeilen. Wenn der Benutzer mehr als zehn Elemente eingibt, möchte ich die gesamte Tabelle ausfüllen und eine neue Seite erstellen, die mit den anderen Elementen gefüllt wird.

Jetzt mache ich mehrere Kopien dieser Seite, um diesen Überlauf zu vermeiden. Aber ich denke nicht, dass dies eine elegante Lösung ist, und es funktioniert nicht für sehr große Eingaben.

+0

Ich mache etwas sehr ähnliches. Hast du das herausgefunden? – Trent

Antwort

0

Ich habe die PdfCopyFields dafür verwendet. Zuerst öffne ich eine neue Instanz von PdfCopyFields und nenne SetFullCompression(). Dann lade ich meine Vorlage in einen Byte-Puffer, und für jede "Template" -Seite verwende ich den PdfStamper, setze die Formularfelder und füge diese Ausgabe in einen Reader und diesen Reader zu den PdfCopyFields hinzu. Das war's. In meinem Test skalierte es sehr gut für mehrere Seiten und die endgültige PDF-Größe war anständig.

Verwandte Themen