diff --git a/History.md b/History.md index 645d4b64..f04d6efc 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,9 @@ +1.5.4 +===== +2018-08-29 + +Fixed #62 fail gracefully on commandline extraction of XML if none is present. +New public function: ZUGFeRDImporter.getUTF8 returns raw XML without Byte Order Mark, if one had been used. 1.5.3 ===== diff --git a/doc/MustangDev.en.odt b/doc/MustangDev.en.odt index a8716715..4acb2eb2 100644 Binary files a/doc/MustangDev.en.odt and b/doc/MustangDev.en.odt differ diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index 538082fe..07315afd 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -495,7 +495,37 @@ public class ZUGFeRDImporter { return new String(rawXML); } + /** + * + * @return return UTF8 XML (without BOM) of the invoice + */ + public String getUTF8() { + if (rawXML == null) { + return null; + } + if (rawXML.length<3) { + return new String(rawXML); + } + + + byte[] bomlessData; + + if ((rawXML[0] == (byte) 0xEF) + && (rawXML[1] == (byte) 0xBB) + && (rawXML[2] == (byte) 0xBF)) { + // I don't like BOMs, lets remove it + bomlessData = new byte[rawXML.length - 3]; + System.arraycopy(rawXML, 3, bomlessData, 0, + rawXML.length - 3); + } else { + bomlessData = rawXML; + } + + return new String(bomlessData); + } + + /** * Returns the raw XML data as extracted from the ZUGFeRD PDF file. */ public byte[] getRawXML() { diff --git a/src/main/java/org/mustangproject/toecount/Toecount.java b/src/main/java/org/mustangproject/toecount/Toecount.java index 5d11d2e8..0469f4b6 100755 --- a/src/main/java/org/mustangproject/toecount/Toecount.java +++ b/src/main/java/org/mustangproject/toecount/Toecount.java @@ -368,11 +368,17 @@ public class Toecount { zi.extract(pdfName); try { - Files.write(Paths.get(xmlName), zi.getRawXML()); + byte[] XMLContent=zi.getRawXML(); + if (XMLContent==null) { + System.err.println("No ZUGFeRD XML found in PDF file"); + + } else { + Files.write(Paths.get(xmlName), XMLContent); + System.out.println("Written to " + xmlName); + } } catch (IOException e) { e.printStackTrace(); } - System.out.println("Written to " + xmlName); } else if (a3only) { /*