Java >> Java tutorial >  >> Tag >> throw

PDFtk kaster en Java-undtagelse, når du forsøger at bruge 'fill_form'-funktionen

Jeg har en PHP-applikation, der udfylder en formular fra et databasekald. På nuværende tidspunkt sætter jeg dette sammen ved hjælp af PDFtk, jeg er i stand til at køre en række PDFtk-kommandoer uden problemer, og jeg arbejder i øjeblikket på den ønskede kommando på kommandolinjen.

Mit opkald er i øjeblikket dette:

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

Dette nøjagtige opkald, der kører flere gange, genererer nogle gange denne fejl:

 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)

og denne fejl nogle gange:

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)

Fejlmeddelelsen skifter, men kommandoen virker aldrig, og formularen udfyldes aldrig. Som jeg siger, fungerer PDFtk med andre kommandoer, jeg har været i stand til at generere krypterede PDF'er og køre de faste kommandoer med succes.

Mit spørgsmål er, hvad der forårsager denne fejl, og hvordan løser jeg den?

Svar

Som det viser sig, var problemet ikke som Bruno Lowagie foreslog med hensyn til konsistensen af ​​PDF'en.

Jeg var løbet tør for ideer og tænkte bare, at jeg ville prøve at generere FDF på en anden måde. Ved at køre kommandoen:

pdftk /full/path/to/template.pdf generate_fdf output /full/path/to/output.fdf

Og da jeg inspicerede den resulterende fil, var jeg i stand til at få en mere nøjagtig FDF, og da jeg kørte fill_form kommandoen:

pdftk /full/path/to/template.pdf fill_form /full/path/to/output.fdf output /full/path/to/output.pdf

Jeg fik et ordentligt svar, og alt fungerede. Så det problem, jeg fik, var faktisk forårsaget af, at FDF'en på en eller anden måde var forkert udformet.

Min endelige løsning var denne, hvis nogen er interesseret. Det kræver en skabelon PDF med felter, genererer en FDF for at udfylde den, opretter en ny PDF ved at tilføje data fra FDF med skabelonen PDF, omdirigerer browseren til PDF's placering.

Stor tak til Bruno Lowagie for at hjælpe med at forstå systemet bedre og udelukke et par ting.


Java tag