diff --git a/library/src/main/java/org/mustangproject/FileAttachment.java b/library/src/main/java/org/mustangproject/FileAttachment.java new file mode 100644 index 00000000..d17aa727 --- /dev/null +++ b/library/src/main/java/org/mustangproject/FileAttachment.java @@ -0,0 +1,67 @@ +package org.mustangproject; + +public class FileAttachment { + + protected String filename; + protected String mimetype; + protected String relation; + protected String description; + protected byte[] data; + + public FileAttachment(String filename, String mimetype, String relation, byte[] data) { + this.filename = filename; + this.mimetype = mimetype; + this.relation = relation; + this.data = data; + description = "Additional file attachment"; + } + + public String getDescription() { + return description; + } + + public FileAttachment setDescription(String description) { + this.description = description; + return this; + } + + public String getFilename() { + return filename; + } + + public FileAttachment setFilename(String filename) { + this.filename = filename; + return this; + } + + public String getMimetype() { + return mimetype; + } + + public FileAttachment setMimetype(String mimetype) { + this.mimetype = mimetype; + return this; + } + + public String getRelation() { + return relation; + } + + public FileAttachment setRelation(String relation) { + this.relation = relation; + return this; + } + + public byte[] getData() { + return data; + } + + public FileAttachment setData(byte[] data) { + this.data = data; + return this; + } + + + + +} diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java index 82bb2382..aacdcdec 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java @@ -37,11 +37,13 @@ import org.apache.xmpbox.schema.PDFAIdentificationSchema; import org.apache.xmpbox.schema.XMPBasicSchema; import org.apache.xmpbox.type.BadFieldValueException; import org.apache.xmpbox.xml.XmpSerializer; +import org.mustangproject.FileAttachment; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.xml.transform.TransformerException; import java.io.*; +import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map; @@ -53,12 +55,10 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte protected Profiles profile = Profiles.EXTENDED; protected PDFAConformanceLevel conformanceLevel = PDFAConformanceLevel.UNICODE; - + protected ArrayList fileAttachments = new ArrayList(); protected boolean ensurePDFisUpgraded = true; - private HashMap additionalFiles = new HashMap(); - private boolean disableAutoClose; private boolean fileAttached = false; @@ -114,8 +114,7 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte } public ZUGFeRDExporterFromA3 addAdditionalFile(String name, byte[] content) { - - additionalFiles.put(name,content); + fileAttachments.add(new FileAttachment(name, "text/xml", "Supplement", content).setDescription("ZUGFeRD extension/additional data")); return this; } @@ -209,7 +208,8 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte } public void attachFile(String filename, byte[] data, String mimetype, String relation) { - //throw new RuntimeException("Not implemented"); + FileAttachment fa=new FileAttachment(filename, mimetype, relation, data); + fileAttachments.add(fa); } /*** @@ -521,9 +521,10 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte "Invoice metadata conforming to ZUGFeRD standard (http://www.ferd-net.de/front_content.php?idcat=231&lang=4)", "text/xml", xmlProvider.getXML()); - for (String filenameAdditional : additionalFiles.keySet()) { - PDFAttachGenericFile(doc, filenameAdditional, "Supplement", "ZUGFeRD extension/additional data", "text/xml", additionalFiles.get(filenameAdditional)); + for (FileAttachment attachment: fileAttachments) { + PDFAttachGenericFile(doc, attachment.getFilename(), attachment.getRelation(), attachment.getDescription(), attachment.getMimetype(), attachment.getData()); } + return this; } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index e4db6483..7e856144 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -37,6 +37,7 @@ public class ZF2PushTest extends TestCase { final String TARGET_CORRECTIONPDF = "./target/testout-ZF2PushCorrection.pdf"; final String TARGET_ITEMCHARGESALLOWANCESPDF = "./target/testout-ZF2PushItemChargesAllowances.pdf"; final String TARGET_CHARGESALLOWANCESPDF = "./target/testout-ZF2PushChargesAllowances.pdf"; + final String TARGET_ATTACHMENTSPDF = "./target/testout-ZF2PushAttachments.pdf"; public void testPushExport() { @@ -92,21 +93,21 @@ public class ZF2PushTest extends TestCase { .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).ignorePDFAErrors() .load(SOURCE_PDF)) { - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname,"teststr", "55232","teststadt","DE").addTaxID("0815")).setOwnVATID("0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE4711").setContact(new Contact("Franz Müller","01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0))) - - ); byte[] b={12,13}; ze.attachFile("one.pdf", b, "Application/PDF", "Alternative"); ze.attachFile("two.pdf", b, "Application/PDF", "Alternative"); + ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname,"teststr", "55232","teststadt","DE").addTaxID("0815")).setOwnVATID("0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE4711").setContact(new Contact("Franz Müller","01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0))) + + ); String theXML = new String(ze.getProvider().getXML()); assertTrue(theXML.contains("