• jPDFFields

    jPDFFields

    jPDFFields

    Work with interactive PDF forms to import, export, set, and get field values.

    TRY LIVE DEMO

jPDFFields Entwicklerhandbuch

Inhalt

javalogo
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 oder Applet 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.