Java pdfBox: Füllen Sie pdf-Formular, fügen es pddocument, und wiederholen Sie
Ich habe ein pdf-Formular aus und ich versuche, pdfBox, füllen Sie das Formular aus und drucken Sie das Dokument. Ich habe es funktioniert großartig für 1 Seite print-jobs, aber ich musste versuchen, und ändern Sie für mehrere Seiten. Im Grunde ist es ein Formular mit Basis-info bis oben und eine Liste der Inhalte. Gut, wenn der Inhalt größer als das, was form hat Raum für ich habe es zu einem mehrseitigen Dokument. Ich am Ende mit einem Dokument, das mit einer schönen Seite ein und dann werden alle übrigen Seiten sind die leere Vorlage. Was mache ich falsch?
PDDocument finalDoc = new PDDocument();
File template = new File("path/to/template.pdf");
//Declare basic info to be put on every page
String name = "John Smith";
String phoneNum = "555-555-5555";
//Get list of contents for each page
List<List<Map<String, String>>> pageContents = methodThatReturnsMyInfo();
for (List<Map<String, String>> content : pageContents) {
PDDocument doc = new PDDocument().load(template);
PDDocumentCatlog docCatalog = doc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
acroForm.getField("name").setValue(name);
acroForm.getField("phoneNum").setValue(phoneNum);
for (int i=0; i<content.size(); i++) {
acroForm.getField("qty"+i).setValue(content.get(i).get("qty"));
acroForm.getField("desc"+i).setValue(content.get(i).get("desc"));
}
List<PDPage> pages = docCatalog.getAllPages();
finalDoc.addPage(pages.get(0));
}
//Then prints/saves finalDoc
InformationsquelleAutor Andrew | 2015-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei wichtige Fragen, die Sie code:
Der AcroForm-element einer PDF-Datei ist ein Dokument-Objekt. Sie nur Kopie der ausgefüllten Vorlage in
finalDoc
. So werden die form-Felder HinzugefügtfinalDoc
nur als Anmerkungen der jeweiligen Seite, aber Sie werden nicht Hinzugefügt, auf die AcroForm zu erhalten vonfinalDoc
.Ist dies nicht ersichtlich, im Adobe Reader, sondern bilden Dienste, oft identifizieren Sie verfügbare Felder die Felder aus dem Dokument-Ebene AcroForm Eintrag und Suche nicht die Seiten für zusätzliche Formularfelder.
Die eigentliche show-stopper: fügen Sie Felder mit identischen Namen für die PDF. Aber PDF-Formulare, Dokument-weit Entitäten. I. e. es kann nur ein einzelnes Feld Entität mit einem bestimmten Namen in einem PDF. (Dieses Feld Unternehmen kann mehrere Visualisierungen aka widgets, aber dies erfordert, dass Sie die Schaffung eines einheitlichen Feld-Objekt mit mehreren Kind-widgets.Darüber hinaus sind diese widgets werden voraussichtlich zeigen den gleichen Wert, das ist nicht das, was Sie wollen...)
So, müssen Sie benennen Sie die Felder, die einmalig vor der Aufnahme in die
finalDoc
.Hier ein Vereinfachtes Beispiel die arbeiten auf einer Vorlage mit nur einem Feld "ins samplefeld":
Als Sie alle Felder sehen zu können umbenannt werden, bevor Sie Hinzugefügt werden, um
finalForm
:und Sie sind gesammelt in der Liste
fields
die dann Hinzugefügt, um diefinalForm
AcroForm:InformationsquelleAutor mkl