Benutzer mit den meisten Antworten
EmbeddedObject in XML auslesen und als Datei ablegen

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.
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- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Freitag, 22. November 2019 08:32
- Als Antwort markiert Atlan Gonozal Freitag, 22. November 2019 12:57
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 iTextSharpGruß,
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.
-
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.
-
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- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Freitag, 22. November 2019 08:32
- Als Antwort markiert Atlan Gonozal Freitag, 22. November 2019 12:57
-
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.
-
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, RemotesupportSatz 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.