jPDFFields Entwicklerhandbuch
Inhalt
Einführung
Erste Schritte
Daten aus Feldern per Programm extrahieren
Exportieren nach FDF oder XFDF
Felder mit Daten per Programm füllen
Daten aus FDF oder XFDF importieren
Formularfelder verflachen
Grundlegende Dokument-Informationen bestimmen
Verteilung und JAR-Dateien
Javadoc API
Source Code Samples
Einfürung
jPDFFields ist eine Java-Bibliothek, die sich nahtlos in Ihre Anwendung integriert, um mit interaktiven PDF-Formularen, auch Acroforms genannt, zu arbeiten. jPDFFields bietet folgende Funktionen, um mit Formularen zu arbeiten:
- Laden von interaktiven PDF-Formularen aus Dateien, Netzgeräten, URLs oder Input-Streams
- Eine Liste aller in einem interaktiven Formular enthaltenen Felder bestimmen und mit ihnen im Programm arbeiten
- Daten aus Formularfeldern per Programm extrahieren
- Daten aus Formularfeldern in FDF oder XFDF Formate exportieren (Dateien und Output-Streams)
- Formularfelder mit Daten per Programm füllen
- Daten aus FDF oder XFDF (Dateien oder Input-Streams) in Formularfelder importieren
- Das geänderte PDF-Formular speichern
Wie alle unsere Bibliotheken baut jPDFFields auf dem Qoppa-eigenen Format auf und verlangt keine Programme von Drittherstellern oder Treiber.
Erste Schritte
Ausgangspunkt beim Einsatz von jPDFFields ist com.qoppa.pdfFields.PDFFields. Diese Klasse wird benutzt, um Dokumente in eine Anwendung zu laden, um mit Formularfeldern zu arbeiten und danach das Dokument zu speichern. Diese Klasse bietet drei Konstruktoren, um PDF-Dateien aus dem Dateisystem, einer URL oder einem InputStream zu laden. Alle Konstruktoren benötigen einen zusätzlichen Parameter, ein Objekt, das IPasswordHandler implementiert, dieses wird abgefragt, falls die PDF-Datei beim Öffnen ein Kennwort verlangt. Für nicht-verschlüsselte PDF-Dateien kann der zweite Parameter “null” sein:
PDFFields pdfFields = new PDFFields (new URL("http://www.mysite.com/content.pdf"), null); |
Daten aus Feldern per Programm extrahieren
Sobald ein PDFFields-Objekt angelegt wurde, braucht die Host-Anwendung lediglich die getFields-Methode aufzurufen, um eine Liste aller im geladenen Dokument enthaltenen Felder zu bekommen. Danach ist es möglich, mit jedem Feld individuell, abhängig vom seinem Feldtyp, zu arbeiten, um Informationen und Daten zu extrahieren.
Vector fields = pdfFields.getFieldList(); for (int count = 0; count < fields.size(); ++count) { FormField field = (FormField) fields.get(count); // field type description System.out.println("Field Type " + field.getFieldTypeDesc()); // field name System.out.println("Field Name " + field.getFieldName()); // field value & options if (field instanceof TextField) { System.out.println("Value " + ((TextField) field).getValue()); System.out.println("Default Value " + ((TextField) field).getDefaultValue()); } else if (field instanceof RadioButtonGroupField) { System.out.println("Value " + ((RadioButtonGroupField) field).getValue()); System.out.println("Default Value " + ((RadioButtonGroupField) field).getDefaultValue()); } else if (field instanceof CheckBoxField) { System.out.println("Value " + ((CheckBoxField) field).getValue()); System.out.println("Default Value " + ((CheckBoxField) field).getDefaultValue()); } else if (field instanceof ComboField) { System.out.println("Value " +((ComboField) field).getValue()); System.out.println("Options " +((ComboField) field).getExportOptions()); System.out.println("Default Value " + ((ComboField) field).getDefaultValue()); } else if (field instanceof ListField) { System.out.println("Value " + ((ListField) field).getValues()); System.out.println("Options " +(((ListField) field).getExportOptions()); System.out.println("Default Values " +((ListField) field).getDefaultValue()); } else if (field instanceof SignatureField) { System.out.println("Signature Name " + ((SignatureField) field).getSignName()); System.out.println("Signature Date " + ((SignatureField) field).getSignDateTime()); } } |
Exportieren nach FDF oder XFDF
Um Formulardaten in eine FDF- oder XFDF-Datei (oder einen Output-Stream) zu exportieren, genügt ein Aufruf der exportAsFDF- oder exportAsXFDF-Methode aus der PDFFields-Klasse.
Beide Methoden sind mit einem Datei- oder einem Java-OutputStream als Argument verfügbar.
als FDF exportieren (exportFDFFile ist ein Java File-Objekt)
pdfFields.exportAsFDF(exportFDFFile.getAbsolutePath());
Felder mit Daten per Programm füllen
Um Felder mit Daten zu füllen, können Sie die getField-Methode benutzen, um ein Feld über seinen Feldnamen zu bekommen, danach benutzen Sie die setValue-Methode, um die Daten zu setzen. Um Werte in Comboboxen und Listenfelder zu setzen, benutzen Sie die Werte aus den Export-Optionen eines Feldes und nicht die Anzeige-Optionen. Um ein PDF-Dokument zu speichern, müssen Sie die save-Methode aufrufen.
((TextField) pdfFields.getField("LastName")).setValue("Smith"); ((TextField) pdfFields.getField("FirstName")).setValue("Maggie"); // Der Wert der Married-Checkbox ist "M" (Checkbox ist ausgewählt) ((CheckBoxField) pdfFields.getField("Married")).setValue("M"); // Der Wert des Gender Radiobutton ist "Female" ((RadioButtonGroupField) pdfFields.getField("Gender")).setValue("Female"); ((ComboField) pdfFields.getField( "Country")).setValue("US"); // Liste felder werte sind Kroger, Publix ((ListField) pdfFields.getField( "Supermarkets")).setValue(new Vector(new String[]{ "Kroger", "Publix"})); // PDF-Dokument speichern (outputPDFFile ist ein Java File-Objekt) pdfFields.saveDocument(outputPDFFile.getAbsoluteFileName()); |
Daten aus FDF oder XFDF importieren
Um Daten in Feldern aus einer FDF- oder XFDF-Datei (oder Output-Stream) zu importieren, rufen Sie einfach die importFDF- oder importXFDF-Methode aus der PDFFields-Klasse auf.
Beide Methoden sind mit einem File- oder einem Java-Inputstream als Argument verfügbar. Falls Sie das PDF-Dokument speichern wollen, müssen Sie explizit die save-Methode aufrufen.
// FDF importieren (importFDFFile ist ein Java File-Objekt) pdfFields.importFDF(importFDFFile.getAbsolutePath()); // PDF-Dokument speichern (outputPDFFile ist ein Java File-Objekt) pdfFields.saveDocument(outputPDFFile.getAbsoluteFileName()); |
Formularfelder verflachen
Um Formularfelder in einem PDF-Formular zu verflachen, müssen Sie einfach die flattenFields-Methode aus der PDFFields-Klasse aufrufen. Dies wird den Inhalt der Felder direkt auf die Seite zeichnen und die Felder selbst aus dem PDF-Dokument entfernen. Diese Methode hat einen booleschen Wert als Parameter, um anzuzeigen, ob Schaltflächen gezeichnet werden sollen oder nicht. Meistens macht es keinen Sinn, Schaltflächen, sobald sie verflacht wurden, zu zeichnen, da sie über keine Aktion mehr verfügen.
// flatten form fields - push buttons will be omitted when painting pdfFields.flattenFields(false); // save pdf document (outputPDFFile is a Java File Object) pdfFields.saveDocument(outputPDFFile.getAbsoluteFileName()); |
Grundlegende Dokument-Informationen bestimmen (Titel, Autor, etc..)
Um grundlegende Informationen über das geladene PDF-Dokument zu erhalten, müssen Sie die DocumentInfo-Klasse lesen, auf diese kann durch PDFFields.getDocumentInfo zugegriffen werden. Mittels dieser Klasse können Sie Informationen über das Dokument wie den Titel, Autor, Betreff, Schlüsselwörter, etc. erhalten.
System.out.println(pdfFields.getDocumentInfo().getTitle()); System.out.println(pdfFields.getDocumentInfo().getAuthor()); System.out.println(pdfFields.getDocumentInfo().getKeywords()); |
Verteilung und JAR-Dateien
jPDFFields wird in einer einzigen JAR-Datei ausgeliefert; jPDFFields.jar – sie wird mit dem Evaluationsbeispiel installiert. Wenn eine Anwendung, die jPDFFields enthält, verteilt werden soll, muss, damit die Anwendung läuft, die jPDFFields.jar-Datei zusammen mit ihr verteilt werden; zusätzlich muss diese im Classpath aufgenommen werden.