diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java
index b7fbede6..aa85abcb 100644
--- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java
+++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java
@@ -23,7 +23,11 @@ import junit.framework.TestSuite;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary;
+import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode;
import org.apache.pdfbox.pdmodel.common.PDMetadata;
+import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification;
+import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.xmpbox.XMPMetadata;
import org.apache.xmpbox.schema.PDFAIdentificationSchema;
@@ -415,17 +419,18 @@ public class MustangReaderWriterTest extends MustangReaderTestCase {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ze.export(baos);
ze.close();
- String pdfContent = baos.toString(StandardCharsets.UTF_8);
- assertFalse(pdfContent.indexOf(DocumentContextParameterTypeConstants.BASIC) >= 0);
- assertFalse(pdfContent.indexOf(DocumentContextParameterTypeConstants.EXTENDED) >= 0);
- assertTrue(pdfContent.indexOf(DocumentContextParameterTypeConstants.COMFORT) >= 0);
+ byte[] targetBytes = baos.toByteArray();
+ String xmlContent = readEmbeddedXmlFromPdf(targetBytes, "ZUGFeRD-invoice.xml");
+ assertFalse(xmlContent.contains(DocumentContextParameterTypeConstants.BASIC));
+ assertFalse(xmlContent.contains(DocumentContextParameterTypeConstants.EXTENDED));
+ assertTrue(xmlContent.contains(DocumentContextParameterTypeConstants.COMFORT));
} catch (IOException e) {
fail("IOException should not happen in testZExport");
}
}
-
+
public void testFXExport() throws Exception {
final String TARGET_PDF = "./target/testout-MustangGnuaccountingBeispielRE-20171118_506fx.pdf";
@@ -442,7 +447,8 @@ public class MustangReaderWriterTest extends MustangReaderTestCase {
result.write(buffer, 0, length);
}
- ze.addAdditionalFile("test.pdf", result.toByteArray());
+ var bytes = result.toByteArray();
+ ze.addAdditionalFile("test.pdf", bytes);
ze.setTransaction(this);
ze.disableAutoClose(true);
@@ -451,12 +457,14 @@ public class MustangReaderWriterTest extends MustangReaderTestCase {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ze.export(baos);
ze.close();
- String pdfContent = baos.toString(StandardCharsets.UTF_8);
- assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1);
+ byte[] targetBytes = baos.toByteArray();
+ String pdfContent = new String(targetBytes, StandardCharsets.UTF_8);
+ String xmlContent = readEmbeddedXmlFromPdf(targetBytes, "factur-x.xml");
+ assertTrue(pdfContent.contains("(via mustangproject.org"));
// check for pdf-a schema extension
- assertFalse(pdfContent.indexOf("EN 16931") == -1);
- assertFalse(pdfContent.indexOf("fx") == -1);
- assertFalse(pdfContent.indexOf("urn:cen.eu:en16931:2017") == -1);
+ assertTrue(pdfContent.contains("EN 16931"));
+ assertTrue(pdfContent.contains("fx"));
+ assertTrue(xmlContent.contains("urn:cen.eu:en16931:2017"));
}
// now check the contents (like MustangReaderTest)
@@ -470,6 +478,27 @@ public class MustangReaderWriterTest extends MustangReaderTestCase {
assertEquals(getNumber(), zi.getForeignReference());
}
+ private static String readEmbeddedXmlFromPdf(byte[] targetBytes, String xmlFilename) throws IOException {
+ // Read attached (compressed) XML file
+ try (PDDocument pdDocument = Loader.loadPDF(targetBytes)) {
+ PDDocumentNameDictionary names = new PDDocumentNameDictionary(pdDocument.getDocumentCatalog());
+
+ PDEmbeddedFilesNameTreeNode embeddedFiles = names.getEmbeddedFiles();
+ Map fileMap = embeddedFiles.getNames();
+
+
+ PDComplexFileSpecification fileSpec = fileMap.get(xmlFilename);
+ if (fileSpec == null) {
+ fail("Files does not contain a file named " + xmlFilename);
+ return null;
+ }
+ PDEmbeddedFile embeddedFile = fileSpec.getEmbeddedFile();
+ String xmlContent = new String(embeddedFile.toByteArray(), StandardCharsets.UTF_8);
+ System.out.println(xmlContent);
+ return xmlContent;
+ }
+ }
+
public void testExceptionOnPDF14() {
final String TARGET_PDF = "./target/testout-MustangGnuaccountingBeispielRE-20170509_505new.pdf";