none
EmbeddedObject in XML auslesen und als Datei ablegen RRS feed

  • Frage

  • Hallo zusammen,

    ich habe ein Problem von dem ich annehme, dass es schon zigfach gelöst wurde, aber ich komme nicht weiter (wahrscheinlich das Wald-vor-lauter-Bäumen-Phänomen).

    Ich habe eine XML-Datei (es geht um die XRechnung übrigens), welche in einem Knoten ein EmbeddedObject enthält.

    Das schaut ungefähr so aus:

    <cbc:ID>01_15_Anhang_01.pdf</cbc:ID>
    <cbc:DocumentTypeCode>130</cbc:DocumentTypeCode>
    <cbc:DocumentDescription>Aufschlüsselung der einzelnen Leistungspositionen</cbc:DocumentDescription>
    <cac:Attachment>
        <cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="01_15_Anhang_01.pdf">JVBERi0xLjUNCiW1tbW1DQoxIDAgb2...

    Der Knoten EmbeddedDocumentBinaryObject enthält jede Menge Zeichen, welche ich alle in einen String einlese. Ich verwende eine XMLNode und deren Eigenschaft "InnerText".

    Dann versuche ich diesen riesigen String als Datei zu speichern. Dazu verwende ich folgenden Code:

    byte[] byteArray = Encoding.BigEndianUnicode.GetBytes(attachment.EmbeddedDocumentBinaryObject);
                
    FileStream fs = new FileStream(fullfilename, FileMode.Create, FileAccess.Write);
    fs.Write(byteArray, 0, byteArray.Length);
    fs.Close();

    Der String steht hier drin: "attachment.EmbeddedDocumentBinaryObject" Es klappt auch, je nach Encoding entsteht eine mehr oder weniger große Datei (zwischen 200 und 700 KB).

    Leider lässt sich die Datei nicht mit Adobe öffnen, daher vermute ich, dass ich mit meiner Konvertierung noch irgendwas falsch mache. Vielleicht kann mir ja jemand mal auf die Sprünge helfen.

    Viele Grüße, Karsten Heimer.

    Montag, 18. November 2019 13:56

Antworten

  • Hallo Karsten,

    um etwas in etwas anderes zurückverwandeln zu können, musst Du naturgemäß erstmal wissen, wie die Konvertierung in das jetztige Format stattgefunden hat.

    Ist das eine Base64 Abbildung der PDF Datei?

    BTW: Wie kommst Du auf BigEndianUnicode? Ist das so vorgegeben?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 19. November 2019 13:31
    Moderator

Alle Antworten

  • Hallo Karsten,

    Hast Du versucht, iTextSharp für die Konvertierung von XML in PDF zu benutzen, wie unten beschrieben:
    How can convert XML to PDF using iTextSharp?
    Ein Beispiel für das Einbetten von Schriftarten in die PDF-Zieldatei beim Konvertieren von XML in PDF könnte hilfreich für Dich sein. Weitere Informationen findest Du in diesem Artikel:
    Embed font into PDF file by using iText
    Du kannst iTextSharp ausprobieren, um Ansichten als Zeichenfolgen zu rendern, die Du anschließend in PDF-Dateien konvertierst, wie hier erwähnt:
    Rendering PDF Views in ASP MVC using iTextSharp

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 19. November 2019 11:52
    Administrator
  • Hallo Ivan,

    danke für deine Antwort. Wenn ich das richtig verstanden habe, dann kann iTextSharp eine komplette XML-Datei in eine PDF-Datei umwandeln. Das ist aber nicht das, was ich möchte.

    Ich habe eine XML-Datei, welche mitten drin einen Knoten hat, dessen Inhalt aus vielen Zeichen besteht. Diese Zeichen stellen eine konvertierte XML-Datei dar, welche ich wieder rückkonvertieren möchte.

    Es geht also nur darum, diese Zeichen hier irgendwie wieder in eine PDF-Datei rückzuverwandeln:

    <cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="01_15_Anhang_01.pdf">JVBERi0xLjUNCiW1tbW1DQoxIDAgb2...

    Gruß, Karsten.

    Dienstag, 19. November 2019 12:37
  • Hallo Karsten,

    um etwas in etwas anderes zurückverwandeln zu können, musst Du naturgemäß erstmal wissen, wie die Konvertierung in das jetztige Format stattgefunden hat.

    Ist das eine Base64 Abbildung der PDF Datei?

    BTW: Wie kommst Du auf BigEndianUnicode? Ist das so vorgegeben?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 19. November 2019 13:31
    Moderator
  • Hallo Stefan,

    danke für deine Antwort.

    Ich weiß leider nicht genau, wie die Originaldatei konvertiert wurde. Die XML-Datei ist eine Beispieldatei für eine sogenannte X-Rechnung, das Format gibt das KOSIT vor. Ich denke, ich werde da noch etwas recherchieren müssen.

    Der "BigEindianUnicode" ist nur einer der Encodings, welche ich ausprobiert hatte. Ich bin halt alle Encodings durchgegangen. Die XML-Datei selber ist laut ihrem Header im "UTF-8" kodiert. Der einzige Unterschied zwischen den Encodings ist die Größe der resultierenden PDF-Datei, aufrufbar ist keine Variante davon. Irgendwas mache ich daher noch falsch.

    Gruß, Karsten.

    Dienstag, 19. November 2019 17:48
  • Hallo Karsten,

    ...Ist das eine Base64 Abbildung der PDF Datei?...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Satz und Sieg würde ich meinen, jawoll, wir haben eine 64-Bit-Abbildung.

    Der Code hier bringts dann: 

    byte[] byteArray = System.Convert.FromBase64String(attachment.EmbeddedDocumentBinaryObject);

    Dann bedanke ich mich mal recht herzlich bei allen und wünsche eine schönes Wochenende.

    Gruß, Karsten.

    Freitag, 22. November 2019 12:57