Problema:
Compilare lato codice i campi (che in sostanza sono dei placeholder, a una chiave va inserito un valore) di un template PDF.
Soluzione:
Usare la libreria iText, che permette la manipolazione di documenti PDF.
Tramite questa libreria possiamo quindi estrarre da un PDF il form da compilare, riempire via codice i suoi campi, e salvarlo compilato in un altro PDF.
Ecco un esempio:
Per prima cosa importiamo il PDF di partenza, in cui è contenuto il template con la form da riempire, nell'oggetto PdfReader.
PdfReader reader = new PdfReader(<nome_pdf_template>);
Andiamo poi a generare il PDF di arrivo, in cui vogliamo andare a sostituire i placeholder, e creiamo un oggetto PdfStamper passandogli come parametri il nuovo file e l'oggetto PdfReader (il PDF di partenza).
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(<nome_pdf_
compilato>));
A questo punto possiamo ottenere la form del PDF e agire su essa valorizzandone i campi.
AcroFields form = stamper.getAcroFields();
form.setField(<chiave>, <valore>);
Dove la chiave è la stringa che rappresenta il placeholder e il valore è il testo che riempirà quel placeholder.
Per finire chiudiamo il documento chiamando
stamper.close();
Inserimento di immagini
Nell'esempio precendente abbiamo inserito nel placeholder del testo, ma si possono inserire anche delle immagini se il campo è predisposto per farlo, ovvero se è di tipo PushbuttonField.
Il tipo di campo si può scoprire in questo modo:
form.getFieldType(<chiave>);
Una volta appurato che il campo sia di tipo giusto, otteniamo il PushbuttonField in questo modo
PushbuttonField pushButtonField = form.
getNewPushbuttonFromField(<
chiaveImg>);
Poi andiamo a settare l'immagine nel campo (la classe Image è del package com.lowagie.text.)
URL path = new URL(<immagine>);
pushButtonField.setImage(
Image.getInstance(path));
e infine settiamo il campo immagine nella form usando il metodo replacePushbuttonField.
form.replacePushbuttonField(<
chiaveImg>, pushButtonField.getField());