web-dev-qa-db-fra.com

Comment automatiser PDF remplissage du formulaire 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 paperasse, et je voudrais développer un système qui lit simplement les données de leur serveur MySQL (que j'ai configuré pour eux dans un projet précédent) et qui alimente les données en PDF versions de tous les formulaires qu'ils doivent remplir. Cela les aidera énormément et leur fera gagner beaucoup de temps, tout en éliminant de nombreuses erreurs humaines commises lors du remplissage de ces formulaires.

Ne sachant rien sur les internes des fichiers PDF, je peux prévoir deux pistes ici:

  • Harder Way: 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 texte sauf bla aux coordonnées (x, y) suivantes ... "; ou
  • Way plus facile: PDF permet déjà la construction de "champs" qui peuvent être remplis; de cette façon j'écris simplement du code qui dit "ajouter un extrait de texte blah au champ appelé * valeur_adresse * ... ", etc.

Ma première question est donc la suivante: laquelle des deux avenues suis-je confrontée? PDF a 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 dire qu'il pouvait être difficile de travailler avec. Quelqu'un peut-il apporter des idées ou des recommandations générales ici? Merci d'avance!

23
IAmYourFaja

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

Adobe fournit une bibliothèque pour ce faire: Acrobat Forms Data Format (FDF) Toolkit

Apache PDFBox peut également être utilisé pour cela.

20
RealHowTo

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();
}
5
Bruno Lowagie