How to read ZUGFeRD data from a PDF?

510 views
Skip to first unread message

Jochen Stärk

unread,
Nov 6, 2014, 6:18:02 AM11/6/14
to koni...@googlegroups.com
Hi,

Are there any examples how to use a InvoiceExtractor like e.g. PDFBoxInvoiceExtractor?
I did not find any (nor any tests) and when I use

 PDFBoxInvoiceExtractor x=new PDFBoxInvoiceExtractor();
 byte [] bytes=x.extract(new FileInputStream("filename.pdf"));
 System.out.println(bytes);

I have two issues:
1.) the output is not there at all because a
java.lang.IncompatibleClassChangeError: Class org.apache.pdfbox.pdmodel.PDDocument does not implement the requested interface java.io.Closeable
will be fired.
b) Even this nonexistent output is just XML, which could be documented in the javadoc of the method. I found it out with a reader (called "in") on a inputstreamreader, if I don't close that reader.
If I invoke in.close() which is AFAIK recommended there I will get the above mentioned java.lang.IncompatibleClassChangeError as well.

Did I miss some way to parse this XML which is actually implemented in Konik?
Because if not, one could consider to implement a parsing on a higher level, like Mustangprojects' ZUGFeRDimporter: The sample files I got hold of e.g. did not all provide a DuePayableAmount - and Mustangproject in this case accordingly falls back to GrandTotalAmount.

                       
thanks
Jochen

Vadim

unread,
Nov 6, 2014, 2:52:10 PM11/6/14
to koni...@googlegroups.com
Hi Jochen,

warum möchtest du nicht PdfHandler.appendInvoice(final Invoice invoice, InputStream inputPdf, OutputStream resultingPdf) verwenden?
PDFBoxInvoiceExtractor ist eine Interne Klasse, damit bindest du dich unnötigerweise an die PDFBox api. 

Wegen IncompatibleClassChangeError was für eine Version von PDFBox hast du?


Grüsse,
Vadim

Jochen Stärk

unread,
Nov 8, 2014, 6:35:01 AM11/8/14
to koni...@googlegroups.com
>warum möchtest du nicht PdfHandler.appendInvoice(final Invoice invoice, InputStream inputPdf, OutputStream resultingPdf) verwenden?

Weil sich die Signatur anhört als würde die Funktion schreiben (tut sie das nicht?) und nicht lesen, ein resultingPDF würde ich nicht erwarten und appenden will ich ja auch nix. In dem Fall habe ich ein Eingangs-PDF und erwate als Rückgabe vielleicht ein invoice.

Der Mangel an Beispiel oder Dokumentation hat bei mir dazu geführt, dass ich einfach mal aufs geratewohl nach Klassennamen gesucht haben die auch nur entfernt mit meinem Vorhaben zu tun haben könnte. War wohl eine blöde Idee.

>
PDFBoxInvoiceExtractor ist eine Interne Klasse, damit bindest du dich unnötigerweise an die PDFBox api.

Das würde ich zwar sehr gern vermeiden, einzig habe ich in der Dokumentation nichts davon gelesen, dass es eine interne Klasse ist, dass ich mich damit an PDFBox binde, oder welche Klasse ich ansonsten wie verwenden soll...?

>Wegen IncompatibleClassChangeError was für eine Version von PDFBox hast du?

1.8.2.

ciao
Jochen

Vadim

unread,
Nov 8, 2014, 9:41:05 AM11/8/14
to koni...@googlegroups.com
Hallo Jochen,

danke für deine Feedback, ich habe jetzt ein wenig die Dokumentation angepasst. Vor allem Kapitel 1 sollte alles wesentliche enthalten um los legen zu können. Wenn dir noch etwas fehlt sag bescheid, ich versuche dann die Dokumentation entsprechend anzupassen.


Wegen dem IncompatibleClassChangeError, dafür müsstest du PDFBox auf die neuester Version upgraden. Momentan ist es 1.8.7.


Grüsse,
Vadim


Reply all
Reply to author
Forward
0 new messages