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:
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!
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.
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();
}