Comment automatiser le remplissage de formulaires PDF en Java


Je fais du développement "pro bono" pour un garde-manger près de chez moi. Ils sont inondés de formulaires et de documents, et j'aimerais développer un système qui lit simplement les données de leur serveur MySQL (que j'ai configuré pour eux sur un projet précédent) et alimente les données en versions PDF de tous les formulaires qu'ils doivent remplir. Cela va aider énormément et économiser beaucoup de temps, ainsi que de se débarrasser de beaucoup d'erreurs humaines qui sont faites au moment de remplir ces forme.

Ne sachant pas quoi que ce soit sur les internes des fichiers PDF, je peux prévoir deux avenues ici:

  • Manière plus difficile: Il est possible de numériser un document papier, de le transformer en PDF, puis d'avoir un logiciel qui "remplit" le PDF simplement en disant "ajouter du texte sauf blah aux coordonnées (x,y) suivantes..."; ou
  • Moyen plus facile : La spécification PDF permet déjà la construction de "champs" qui peuvent être remplis; de cette façon, j'écris simplement code qui dit " ajouter un extrait de texte blah au champ appelé *address_value*...", etc.

Ma première question est donc: à laquelle des deux avenues suis-je confronté? Le PDF a-t-il un concept de "champs" ou dois-je "remplir" ces documents en indiquant à la bibliothèque PDF les coordonnées en pixels de l'endroit où placer les données?

Deuxièmement, j'ai évidemment besoin d'une bibliothèque open source (et Java) pour ce faire. iText semble être un bon début, mais j'ai entendu qu'il peut être difficile de travailler avec. Peut quelqu'un prête des idées ou des recommandations générales ici? Merci à l'avance!

Author: IAmYourFaja, 2012-07-28

2 answers

Vous pouvez facilement fusionner des données dans les champs PDF en utilisant la technologie FDF(Form Data Format).

Adobe fournit une bibliothèque pour le faire : Formulaires Acrobat Format de Données (DFF) Toolkit

Aussi Apache PDFBox peut être utilisé pour le faire.

 16
Author: RealHowTo, 2012-07-28 15:26:41

Veuillez consulter le chapitre sur les formulaires interactifs dans l'ebook gratuit Les meilleures questions iText sur StackOverflow. Il regroupe les réponses à des questions telles que:

, Ou vous pouvez regarder cette vidéo où j'explique comment utiliser les formulaires pour les rapports, étape par étape.

Voir par exemple:

public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader,
            new FileOutputStream(dest));
    AcroFields fields = stamper.getAcroFields();
    fields.setField("name", "CALIFORNIA");
    fields.setField("abbr", "CA");
    fields.setField("capital", "Sacramento");
    fields.setField("city", "Los Angeles");
    fields.setField("population", "36,961,664");
    fields.setField("surface", "163,707");
    fields.setField("timezone1", "PT (UTC-8)");
    fields.setField("timezone2", "-");
    fields.setField("dst", "YES");
    stamper.setFormFlattening(true);
    stamper.close();
    reader.close();
}
 3
Author: Bruno Lowagie, 2017-05-23 12:03:05