I have a PHP application that fills out a form from a database call. At present I am putting this together using PDFtk, I am able to run a number of PDFtk commands with no issue and I am currently working out the desired command at command line.
My call is currently this:
pdftk /var/www/html/CSR/template/job_card.pdf fill_form /var/www/html/CSR/template/wwwwu7mMH.fdf output /var/www/html/CSR/template/filled4.pdf
This exact call run multiple times generates this error sometimes:
Unhandled Java Exception in create_output(): java.lang.ClassCastException: pdftk.com.lowagie.text.pdf.PdfNull cannot be cast to pdftk.com.lowagie.text.pdf.PdfDictionary at pdftk.com.lowagie.text.pdf.FdfReader.readFields(pdftk) at pdftk.com.lowagie.text.pdf.FdfReader.readPdf(pdftk) at pdftk.com.lowagie.text.pdf.PdfReader.<init>(pdftk) at pdftk.com.lowagie.text.pdf.PdfReader.<init>(pdftk) at pdftk.com.lowagie.text.pdf.FdfReader.<init>(pdftk)
and this error sometimes:
Unhandled Java Exception in create_output(): Unhandled Java Exception in main(): java.lang.NullPointerException at gnu.gcj.runtime.NameFinder.lookup(libgcj.so.10) at java.lang.Throwable.getStackTrace(libgcj.so.10) at java.lang.Throwable.stackTraceString(libgcj.so.10) at java.lang.Throwable.printStackTrace(libgcj.so.10) at java.lang.Throwable.printStackTrace(libgcj.so.10)
The error message alternates but the command never works and the form is never filled. As I say though, the PDFtk works with other commands, I have been able to generate encrypted PDFs and run the fixed commands succesfully.
My question is what is causing this error and how do I fix it?
As it turns out the issue was not as Bruno Lowagie suggested regarding the consistency of the PDF.
I had run out of ideas and just thought I would try generating the FDF a different way. By running the command:
pdftk /full/path/to/template.pdf generate_fdf output /full/path/to/output.fdf
And then inspecting the resulting file, I was able to get a more accurate FDF and then when I ran the fill_form command:
pdftk /full/path/to/template.pdf fill_form /full/path/to/output.fdf output /full/path/to/output.pdf
I got a proper response and everything worked. So the problem I was getting was in fact caused by the FDF being malformed in some way.
My final solution was this if anyone is interested. It takes a template PDF with fields, generates an FDF to fill it, creates a new PDF by adding the data from FDF with the template PDF, redirects the browser to the PDFs location.
Big thanks to Bruno Lowagie for helping understand the system better and rule out a few things.