2017-01-31 2 views
0

J'utilise le code proposé il y a un moment par @ASu:PDFBox ne peut pas trouver le symbole

package pdf_form_filler; 

import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDDocumentCatalog; 
import org.apache.pdfbox.pdmodel.interactive.form.*; 
import java.io.File; 
import java.util.*; 

public class pdf_form_filler { 
public static void listFields(PDDocument doc) throws Exception { 
    PDDocumentCatalog catalog = doc.getDocumentCatalog(); 
    PDAcroForm form = catalog.getAcroForm(); 
    List<PDFieldTreeNode> fields = form.getFields(); 

    for(PDFieldTreeNode field: fields) { 
     Object value = field.getValue(); 
     String name = field.getFullyQualifiedName(); 
     System.out.print(name); 
     System.out.print(" = "); 
     System.out.print(value); 
     System.out.println(); 
    } 
} 

public static void main(String[] args) throws Exception { 
    File file = new File("test.pdf"); 
    PDDocument doc = PDDocument.load(file); 
    listFields(doc); 
} 

} 

Cependant, je continue à obtenir une erreur ne peut pas trouver de symbole pour PDFieldTreeNode. J'ai la dernière pdfbox (2.0.4) mais je ne trouve pas la classe dedans de toute façon. J'ai essayé d'utiliser cela avec PDField à la place mais obtenir erreur pour .getValue

+1

C'est 'List getFields()' pour que votre code ne puisse pas fonctionner. Si vous obtenez une erreur pour 'getValue()' alors dites (modifiez la question) quelle est l'erreur. S'il s'agit d'une trace de pile, incluez la trace de la pile. Lisez aussi javadoc pour getFields(), il ne fournit que les champs de niveau racine. 'getFieldIterator()' peut être ce que vous voulez. S'il vous plaît faites également un lien vers le code par "ASu" afin qu'il puisse être corrigé. –

+0

Le code par @ASu est exactement le même que j'ai posté, mais si vous voulez le voir: http://stackoverflow.com/a/27795227/4480374 aussi, c'est la première fois que j'utilise pdfbox donc je ne ne comprends pas vraiment comment l'utiliser. Je cherchais simplement quelque chose de rapide et facile à obtenir des données de formulaire à partir du pdf – User22

Répondre

0

Pour tous les champs terminaux, faites ceci:

Iterator<PDField> fieldIterator = catalog.getAcroForm(); 
while (fieldIterator.hasNext()) 
{ 
    PDField pdField = fieldIterator.next(); 
    // do stuff with the field 
} 

form.getFields() n'obtient les champs de haut niveau, y compris les champs non terminaux (c.-à-champs sans valeur mais enfants).

Un exemple plus avancé peut être trouvé dans le PrintFields.java example.

+0

Est-ce que cela va retourner tous les champs modifiables sous forme de pdf? – User22

+0

Il retournera tous les champs terminaux. Y compris ceux mis en lecture seule, ou les cases à cocher, ou les boutons radio. Pour obtenir des types de champs spécifiques, vous devez utiliser 'instanceof'. Le mieux serait que vous essayiez. –