diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java index f5b97613..7411d388 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java @@ -112,6 +112,9 @@ public class ZUGFeRDExporter implements Closeable { protected boolean ensurePDFisUpgraded = true; private PDDocument doc; int ZFVersion; + + private HashMap additionalXMLs=new HashMap(); + private boolean disableAutoClose; @@ -128,6 +131,10 @@ public class ZUGFeRDExporter implements Closeable { doc = doc2; init(); } + + public void addAdditonalXML(String filename, byte[] xml) { + additionalXMLs.put(filename, xml); + } public static String getNamespaceForVersion(int ver) { if (ver == 1) { @@ -340,6 +347,9 @@ public class ZUGFeRDExporter implements Closeable { } + for (String filenameAdditional : additionalXMLs.keySet()) { + PDFAttachGenericFile(doc, filenameAdditional, "Supplement", "ZUGFeRD extension/additional data", "text/xml", additionalXMLs.get(filenameAdditional)); + } } public void export(String ZUGFeRDfilename) throws IOException { @@ -459,6 +469,7 @@ public class ZUGFeRDExporter implements Closeable { cus.setXML(zugferdData); this.xmlProvider = cus; PDFattachZugferdFile(null); + } /** diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3Factory.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3Factory.java index ac9b2c43..dd06cd29 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3Factory.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3Factory.java @@ -23,6 +23,8 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; + import javax.activation.DataSource; import javax.activation.FileDataSource; import org.apache.pdfbox.io.IOUtils; @@ -42,7 +44,10 @@ public class ZUGFeRDExporterFromA3Factory implements IExporterFactory { protected String creator = "mustangproject"; /** Creator tool (attribute for PDF) */ protected String creatorTool = null; + + private HashMap additionalXMLs=new HashMap(); + protected int ZFVersion=ZUGFeRDExporter.DefaultZUGFeRDVersion; protected boolean ensurePDFisUpgraded=false; private boolean attachZUGFeRDHeaders=true; @@ -123,7 +128,7 @@ public class ZUGFeRDExporterFromA3Factory implements IExporterFactory { IOUtils.copy(in, buffer); return buffer.toByteArray(); } - private static boolean isValidA1(DataSource dataSource) throws IOException { + private static boolean isValidA1(DataSource dataSource) throws IOException { return getPDFAParserValidationResult(new PreflightParser(dataSource)); } diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index b71f4b1f..bf76a855 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -31,6 +31,7 @@ import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Logger; @@ -67,6 +68,7 @@ public class ZUGFeRDImporter { private String holder; private String amount; private String dueDate; + private HashMap additionalXMLs=new HashMap(); /** Raw XML form of the extracted data - may be directly obtained. */ private byte[] rawXML = null; private String bankName; @@ -151,7 +153,6 @@ public class ZUGFeRDImporter { private void extractFiles(Map names) throws IOException { for (String filename : names.keySet()) { - /** * currently (in the release candidate of version 1) only one attached file with * the name ZUGFeRD-invoice.xml is allowed @@ -174,8 +175,19 @@ public class ZUGFeRDImporter { // fos.write(embeddedFile.getByteArray()); // fos.close(); } + if (filename.startsWith("additional_data")) { + + PDComplexFileSpecification fileSpec = names.get(filename); + PDEmbeddedFile embeddedFile = fileSpec.getEmbeddedFile(); + additionalXMLs.put(filename, embeddedFile.toByteArray()); + + } } } + + public HashMap getAdditionalData() { + return additionalXMLs; + } /** * needs to be called to be able to call the getters