Como automatizar o preenchimento de formulários PDF em Java

Estou a fazer um desenvolvimento "pro bono" para uma despensa perto de onde vivo. Eles são inundados com formulários e documentos, e eu gostaria de desenvolver um sistema que simplesmente lê os dados de seu servidor MySQL (que eu configurado para eles em um projeto anterior) e feeds de dados em versões em PDF de todas as formas que eles são necessários para preencher. Isto irá ajudá-los enormemente e poupá-los um monte de tempo, bem como se livrar de um monte de erros humanos que são feitos ao preencher estes formulario.

Não sabendo nada sobre os internos dos arquivos PDF, posso prever duas avenidas aqui: {[[2]}
  • maneira mais difícil : é possível digitalizar um documento em papel, transformá-lo em um PDF, e então ter software que "preenche" o PDF simplesmente dizendo "adicionar texto exceto blah para as seguintes coordenadas (x,y)..."; ou
  • modo mais fácil : a especificação PDF já permite a construção de "campos" que podem ser preenchidos; desta forma eu só código de escrita que diz: "adicione texto excerpt blah para o campo chamado * address_value*...", etc.
Então, a minha primeira pergunta é: qual das duas vias estou a enfrentar? Será que o PDF tem um conceito de" campos "ou eu preciso" preencher " esses documentos, dizendo à biblioteca de PDF as coordenadas dos pixels de onde colocar os dados?

em segundo lugar, eu obviamente preciso de uma biblioteca de código aberto (e Java) para fazer isso. iText parece ser um bom começo, mas ouvi dizer que pode ser difícil de trabalhar. Poder alguém aqui dá ideias ou recomendações gerais? Obrigado antecipadamente!

Author: IAmYourFaja, 2012-07-28

2 answers

Pode facilmente fundir dados nos campos do PDF usando a tecnologia FDF (Form Data Format).

O Adobe oferece uma biblioteca para fazer isso: o Acrobat Forms Data Format (FDF) Toolkit

Também Apache PDFBox pode ser usado para fazer isso.

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

Por favor, dê uma olhada no capítulo sobre formas interativas no ebook grátis As Melhores perguntas de iText sobre StackOverflow. Ele agrupa as respostas a perguntas como:

Ou podes ver Este vídeoonde eu explico Como usar formulários para comunicar passo a passo.

Ver por exemplo:

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