2017-10-13 7 views
0

Le "formulaire XFA" a été imprimé sur la console après l'exécution des codes, mais pas les champs. Y a-t-il une raison particulière pour laquelle?Aucun champ n'a été imprimé sur la console après avoir vérifié si le formulaire utilise la technologie Acroform ou XFA?

Voici les codes:

public class VerifyPDFForm { 

public static void main(String[] args) throws IOException { 
    String SRC = "c:/Temp/testCopy.pdf"; 
    String DEST = "c:/Temp/test10.txt"; 

    PrintStream out = new PrintStream(new FileOutputStream(DEST)); 
    PdfReader reader = new PdfReader(SRC); 
    AcroFields form = reader.getAcroFields(); 
    XfaForm xfa = form.getXfa(); 
    System.out.println(xfa.isXfaPresent() ? "XFA form" : "AcroForm"); 
    Set<String> fields = form.getFields().keySet(); 
    for (String key : fields) { 
     System.out.println(key); 
    } 
    System.out.flush(); 
    System.out.close(); 
    reader.close(); 
} } 
+0

avez-vous vérifié si 'fields' est vide? – assembler

+0

Il semble que les champs sont remplis lors de l'exécution. Mais ne devrait-il pas encore imprimer le champ indépendamment du fait qu'il soit vide ou non? Vraiment nouveau pour Java et IText. –

+0

bien sûr les 'fields' sont remplis à l'exécution, mais si' fields' est vide, il n'exécutera jamais la boucle et vous imprimez les clés de champ à l'intérieur de la boucle. – assembler

Répondre

0

Je viens de tester votre code avec des fichiers PDF. Vous obtenez uniquement des champs si vous avez un formulaire AcroForm pur ou un formulaire hybride AcroForm/XFA, pas pour un formulaire XFA pur.

Ceci correspond à une révision de code rapide qui révèle que la collection de champs interne n'est remplie que s'il existe des définitions de champ AcroForm.

Ainsi, au sujet de votre question

Y at-il une raison particulière?

... la raison est que le support XFA dans iText 5.x est limité et n'inclut pas l'inspection de champs individuels dans des formulaires XFA purs.

+0

Merci. Est-il encore possible de remplir les champs d'un formulaire XFA purement dynamique avec des données en utilisant Java et IText 5.x? C'est mon but ultime ici. –

+0

vous pouvez extraire le flux XFA en utilisant iText, puis manipuler ite en utilisant l'API xml de votre choix, et éventuellement stocker à nouveau le XML XFA dans le pdf avec iText. – mkl

+0

J'ai réussi à extraire le XML. Le problème était avec la manipulation du XML. Je ne pouvais pas mettre de valeur/données dans un champ de texte particulier. –