InvoiceAppendError

188 views
Skip to first unread message

Marc

unread,
Jan 3, 2015, 12:20:33 PM1/3/15
to koni...@googlegroups.com
Hallo zusammen,

ich versuche MinimalInvoice.java bei mir ans Laufen zu bekommen. createInvoice() und transformInvoiceToXml() funktionieren. In der Funktion appendInvoiceToPdf() gibt es bei folgenden Aufruf eine Exception:

handler.appendInvoice(invoice, inputPdf, resultingPdf);

io.konik.harness.exception.InvoiceAppendError: Error appending Invoice

Im Verzeichnis erscheint das neue PDF-File mit 0 Byte Größe. Ich habe als Input ein PDF-File nach dem Standard PDF/A-1b. Verschiedene Versionen von konik habe ich durchprobiert und auch andere PDF-Files verwendet. Wie kann ich das Problem weiter eingrenzen?

Viele Grüße,
Marc

Vadim

unread,
Jan 3, 2015, 1:14:36 PM1/3/15
to koni...@googlegroups.com
Hallo Marc,

das kann einige gründe haben warum es Fehler gibt. Könntest du den Stacktrace heir posten. Dann kann man besser sehen was nicht stimmt. 


Grüsse,
Vadim

Marc

unread,
Jan 3, 2015, 1:33:28 PM1/3/15
to koni...@googlegroups.com
Hallo Vadim,

danke für die schnelle Antwort. Hier ist der Stacktrace. Ich verwende konik 0.10.2 und pdfbox 1.8.7

io.konik.harness.exception.InvoiceAppendError: Error appending Invoice
        at io.konik.carriage.pdfbox.PDFBoxInvoiceAppender.append(PDFBoxInvoiceAppender.java:99)
        at io.konik.PdfHandler.append(PdfHandler.java:107)
        at io.konik.PdfHandler.appendInvoice(PdfHandler.java:92)
        at com.cid.zugferd.appendInvoiceToPdf(zugferd.java:191)
        at com.cid.zugferd.main(zugferd.java:73)
Caused by: java.io.IOException: Stream closed
        at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:151)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
        at java.io.FilterInputStream.read(FilterInputStream.java:83)
        at java.io.PushbackInputStream.read(PushbackInputStream.java:139)
        at org.apache.pdfbox.io.PushBackInputStream.read(PushBackInputStream.java:91)
        at org.apache.pdfbox.io.PushBackInputStream.peek(PushBackInputStream.java:69)
        at org.apache.pdfbox.io.PushBackInputStream.isEOF(PushBackInputStream.java:157)
        at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1533)
        at org.apache.pdfbox.pdfparser.PDFParser.parseHeader(PDFParser.java:320)
        at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:177)
        at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1214)
        at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1181)
        at io.konik.carriage.pdfbox.PDFBoxInvoiceAppender.append(PDFBoxInvoiceAppender.java:92)
        ... 4 more

Vadim

unread,
Jan 3, 2015, 2:53:33 PM1/3/15
to koni...@googlegroups.com
In deinem code: 
handler.appendInvoice(invoice, inputPdf, resultingPdf);
kannst du schauen ob  inputPdf != null und resultingPdf != null ist?

Die IOException sagt mir, das eines von beiden null sein könnte.

Poste doch auch mal deinen Code hier hin, dann kann man noch besser sehen was nicht stimmt.

Marc

unread,
Jan 3, 2015, 6:50:23 PM1/3/15
to koni...@googlegroups.com
Genau das war's. Ich kann jetzt das PDF generieren.
Bei mir hat das getResourceAsStream den Null-Pointer zurück gegeben.

    public void appendInvoiceToPdf() throws IOException {
       
Invoice invoice = createInvoice();
       
PdfHandler handler = new PdfHandler(); // <1>
       
InputStream inputPdf = getClass().getResourceAsStream("rechnung_10485_7028608_201412.pdf");
       
OutputStream resultingPdf = new FileOutputStream("rechnung_10485_7028608_201412_zf.pdf");
        handler
.appendInvoice(invoice, inputPdf, resultingPdf); // <2>
   
}

Das inputPdf habe ich dann mit einem FileInputStream eingelesen, das hat geklappt.

        InputStream inputPdf = new FileInputStream("rechnung_10485_7028608_201412.pdf");

Vielen Dank für die schnelle Hilfe!

kaune...@gmail.com

unread,
May 3, 2016, 10:15:47 AM5/3/16
to Konik ZUGFeRD Library
Hallo,

ich habe das gleiche Problem wie Marc, nur bringt mich seine Lösung nicht weiter.

Auch ich bekomme die Exception "io.konik.harness.exception.InvoiceAppendError: Error appending Invoice".

Bisher habe ich es auf zwei Wegen probiert.
1. PdfHandler:

PdfHandler handler = new PdfHandler();
InputStream inputPdf = new FileInputStream(pdfPath);
OutputStream resultingPdf = new FileOutputStream(defaultPdfPath);
handler.appendInvoice(invoice, inputPdf, resultingPdf);

2. PdfBox:

string defaultPdfPath = @"C:\temp\zugferd.pdf";
string xml;

PDFBoxInvoiceAppender invAppend = new PDFBoxInvoiceAppender();
InputStream fis = new FileInputStream(pdfPath);
xml = transformInvoiceToXml(invoice);

InputStream inputPdf = new FileInputStream(pdfPath);
InputStream inputXml = new FileInputStream(xml);
OutputStream resultingPdf = new FileOutputStream(defaultPdfPath);

AppendParameter appendParameter = new DefaultAppendParameter(inputPdf, inputXml, resultingPdf, "1.0", "BASIC");
invAppend.append(appendParameter);

In beiden Fällen sind inputPdf, inputXml und resultingPdf nicht null. Daran liegt es schonmal nicht.

Da ich in C# programmiere, brauche ich auch die IKVM-Bibliothek, die ich bereits eingebunden und Verweise gesetzt habe.
Ich bin mir nur nicht sicher, ob es an der Bibliothek oder das Problem woanders liegt.
Die InnerException lautet nämlich so:

Das Objekt des Typs "java.util.PropertyResourceBundle" kann nicht in Typ "sun.util.resources.OpenListResourceBundle" umgewandelt werden.

Ich habe natürlich das Internet durchforstet. Aber überall war die Antwort, dass ich alle IKVM.OpenJDK.*.dll's einbinden muss.
Genau das habe ich getan und trotzdem läuft es nicht.

Hat jemand eine Idee und kann weiterhelfen?

Gruß,
Chris

Vadim

unread,
May 3, 2016, 11:26:45 AM5/3/16
to Konik ZUGFeRD Library
Spontane frage hast du irgendwo einen import/include von OpenListResourceBundle anstatt PropertyResourceBundle?

Hast du dir mal das C# Beispiel angeschaut auf https://github.com/konik-io/ZUGFeRD.NET-Example



kaune...@gmail.com

unread,
May 3, 2016, 11:50:19 AM5/3/16
to Konik ZUGFeRD Library
Hi Vadim,
In das Beispiel hatte ich schonmal reingeschaut. Jetzt, wo ich nochmal drüberlese:
Brauch ich vielleicht den java.util-Import?
Aber eigentlich wäre ja dann eher sun.util wichtig.

Sonst importiere ich keine der beiden Klassen aus der Exceptions-Meldung.

Am Freitag hab ich den Code wieder vor mir. Dann probier ichs mal mit den Imports.

kaune...@gmail.com

unread,
May 6, 2016, 8:19:06 AM5/6/16
to Konik ZUGFeRD Library
Also jeglicher Import funktioniert nicht.
Ich kann auch gar nicht explizit OpenListResourceBundle oder PropertyResourceBundle importieren.
Einzig sun.util.resources. Danach gibt es keine Option OpenListResourceBundle zu wählen.
Auch im java.util-Package ist kein PropertyResourceBundle zu finden.

Weder mit java.util noch mit sun.util.resources hat sich was getan.

Die Source der Exception ist die ZUGFeRD.NET.dll.
Ich habe auch die neueste Version (1.0.1) geladen. In den Datei-Eigenschaften steht trotzdem als Version 1.0.0.0.
Kann da was nicht stimmen?

Ansonsten hatte ich versucht die IKVM-Bibliotheken zu updaten. Von Version 8.0 auf 8.1.
Nur gibt es dann vermutlich einen Verweisfehler. Obwohl ich die Verweise neu gesetzt habe, scheinen diese trotzdem auf 8.0 zu stehen.
In den Eigenschaften in meinem Visual Studio-Projekt stehen in allen DLLs Version 8.1.

Weiterhin habe ich den Code aus dem von Vadim verlinkten GitHub-Link in mein Projekt statt meines Codes eingefügt, es kommt aber zum
selben Fehler.

Dann habe ich das .NET-Beispiel mal geladen und geöffnet. Nachdem die fehlenden Bibliotheken (IKVM & Zugferd.net) im Nuget-Manager
nachträglich installiert wurden, hab ich es ausgeführt und es kommt zu keinem Fehler. Das ZUGFeRD-PDF wird erstellt.

Verwirrung pur!

Da ich in meinem Projekt IKVM und Zugferd.net nicht per Nuget-Manager installiert habe, sondern die DLLs in den Projekteordner kopiert
und auf diese verwiesen habe, hatte ich da die Fehlerquelle vermutet.
Das github-Beispiel kommt aber auch mit dieser Konstellation klar.

Ich weiß einfach nicht mehr weiter.
Das einzige, was ich jetzt noch versuchen werde, ist ein frisches Projekt aufzusetzen.
Vielleicht ist in der ganzen Herumspielerei mit den Bibliotheken irgendwas durcheinander gekommen.

Wer noch Ideen hat, immer her damit.

Ich melde mich wieder.


Gruß
Chris


PS:
Mein StackTrace (falls der für irgendjemand interessant ist).

   bei io.konik.carriage.pdfbox.PDFBoxInvoiceAppender.append(AppendParameter appendParameter)
   bei io.konik.PdfHandler.append(Invoice , InputStream , OutputStream )
   bei io.konik.PdfHandler.appendInvoice(Invoice invoice, InputStream inputPdf, OutputStream resultingPdf)
   bei mpsZugferd.mpsZugferdObj.attachInvoiceToPdf(Invoice invoice, String pdfPath) in c:\Users\cka\Documents\Visual Studio 2012\Projects\ZUGFeRD\mpsZugferd\mpsZugferdObj.cs:Zeile 851.
   bei mpsZugferd.mpsZugferdObj.create(mpsRechnungMetadaten metadaten, String pdfPath) in c:\Users\cka\Documents\Visual Studio 2012\Projects\ZUGFeRD\mpsZugferd\mpsZugferdObj.cs:Zeile 502.
   bei ZUGFeRD.TestForm.btnCreate_Click(Object sender, EventArgs e) in c:\Users\cka\Documents\Visual Studio 2012\Projects\ZUGFeRD\ZUGFeRD\TestForm.cs:Zeile 195.
   bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   bei System.Windows.Forms.Control.WndProc(Message& m)
   bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
   bei System.Windows.Forms.Button.WndProc(Message& m)
   bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   bei ZUGFeRD.Program.Main() in c:\Users\cka\Documents\Visual Studio 2012\Projects\ZUGFeRD\ZUGFeRD\Program.cs:Zeile 19.
   bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   bei System.Threading.ThreadHelper.ThreadStart()



kaune...@gmail.com

unread,
May 12, 2016, 2:28:59 AM5/12/16
to Konik ZUGFeRD Library
Ich habe jetzt mal das .NET-Beispiel als Grundlage für ein neues Projekt genommen und damit funktioniert es.
Vermutlich ist durch die unterschiedlichen Verweise auf die IKVM-Libs irgendwas durcheinander geraten.
Es ist auf jeden Fall ein Problem nur in diesem Projekt.

Somit ist die Sache für mich vorerst erledigt.

Vielen Dank für die schnelle Hilfe!

Gruß
Chris

Vadim

unread,
May 12, 2016, 3:35:56 AM5/12/16
to Konik ZUGFeRD Library
Es ist ganz Wichtig das die Versionen von IKVM und Konik übereinstimmen sonst geht es nicht. Das liegt aber nicht an Konik sondern wie die Libs gegen IKVM gellinkt werden. 


kaune...@gmail.com

unread,
May 12, 2016, 4:58:06 AM5/12/16
to Konik ZUGFeRD Library
Ich weiß, dass meine IKVM-dlls die Version 8.0.5449.1 haben.
Bei der ZUGFeRD.NET.dll habe ich die meines Wissens neueste mit 1.0.1.

Auf der Konik-Website steht auch, dass die IKVM-Version >= 8.0.5449.1 sein muss.
Das habe ich ja dann damit erfüllt.

Sollte so passen, richtig?
Reply all
Reply to author
Forward
0 new messages