I am doing some "pro bono" development for a food pantry near where I live. They are inundated with forms and paperwork, and I would like to develop a system that simply reads data from their MySQL server (which I set up for them on a previous project) and feeds data into PDF versions of all the forms they are required to fill out. This will help them out enormously and save them a lot of time, as well as get rid of a lot of human errors that are made when filling out these forms.
Not knowing anything about the internals of PDF files, I can foresee two avenues here:
So my first question is: which of the two avenues am I facing? Does PDF have a concept of "fields" or do I need to "fill out" these documents by telling the PDF library the pixel coordinates of where to place data?
Second, I obviously need an open source (and Java) library to do this. iText seems to be a good start but I've heard it can be difficult to work with. Can anyone lend some ideas or general recommendations here? Thanks in advance!
You can create fillable PDF form in Java applications by following the steps below: Create a PDF file with a blank page. Add TextBox field and RadioButton field on the page. Save the output PDF file.
Step 1: Create a content handler. Step 2: Create a PDF file locally in the system one is using. Step 3: Now, create a FileInputStream that has the same path where the created PDF file is residing. Step 4: For the PDF file, create a content parser with the help of the metadata type object.
You can easily merge data into PDF's fields using the FDF(Form Data Format) technology.
Adobe provides a library to do that : Acrobat Forms Data Format (FDF) Toolkit
Also Apache PDFBox can be used to do that.
Please take a look at the chapter about interactive forms in the free ebook The Best iText Questions on StackOverflow. It bundles the answers to questions such as:
Or you can watch this video where I explain how to use forms for reporting step by step.
See for instance:
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(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With