PDF Formular ausfüllen mit PDFBox nicht funktioniert
Ich habe eine PDF-Datei mit ein paar Formular-Felder, die ich ausfüllen muss von Java-code. Ich benutze PDFBox-Bibliothek für diesen, und diesen code:
PDDocument pdfDoc = PDDocument.load("C:\\Users\\igor\\Desktop\\test.pdf");
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField("applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]");
if (field != null) {
field.setValue("Milan");
} else {
System.err.println("No field found with name:" + "applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]");
}
pdfDoc.save("C:\\Users\\igor\\Desktop\\testout.pdf");
pdfDoc.close();
Die PDF ist nicht von mir erstellt, ich weiß also nicht, welche Art von form, die von der Datei verwendet (wenn ich das richtig verstehe, es gibt FDF-und XFA-Formulare). Da das PDF ist nicht von mir erstellt wurden, habe ich dieses tool http://support.persits.com/pdf/demo_formfields.asp, um herauszufinden, die Namen der Formular-Felder, und es gab mir diese:
applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]
Wenn ich diese lange-Feld-Namen, ich bekomme keine Fehler, aber das erstellte PDF enthält nicht den Wert, den ich setzen in das Feld ein. Ich dachte, dass vielleicht gab es etwas falsch mit dem Feld name, so habe ich Pdftk-tool, die mir gerade txtFirstName
für das Feld name. Aber wenn ich nur, dass ich die No field found with name: txtFirstName
Fehler. Hilfe?
- Das Feld name vermuten lässt, ist es ein XFA-Feld. Vielleicht haben Sie die Adresse XFA-Feldern unterschiedlich PDFBox? (Ich weiß nicht, die PDFBox-API in allen...)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut ich begreife diese Frage ist sehr alt jetzt, aber ich stolperte über es und dachte, ich sollte post meine Lösung.
Kann man sich die id ' s der Felder im PDF-Formular mithilfe der PDFBox. Es hat eine sehr umfangreiche API, die es nur leider benötigt viel Lesen, um herauszufinden, was Sie zu tun haben.
Den Namen des Formularfeldes, die Sie verwenden möchten
getFullyQualifiedName
die Teil derPDField
Klasse.Leider kann man nicht alle Dateinamen in einem Rutsch (dass ich das sagen kann) von der
PDAcroform
Klasse, so können Sie einfach erstellen Sie ein array mit den form Namen und dann die Schleife durch jeden.z.B.
Hoffe, das jemand hilft.
Cheers