From f031790c4db75d87c1eeafeb0bcba85d0af0b253 Mon Sep 17 00:00:00 2001 From: Martin Wachtveitl Date: Wed, 22 Nov 2023 14:10:00 +0100 Subject: [PATCH 1/3] 341 beta --- .../org/mustangproject/commandline/Main.java | 24 +-- Mustang-CLI/src/test/resources/EmptyPDFA1.pdf | Bin 0 -> 87968 bytes .../ZUGFeRD/IZUGFeRDExporter.java | 2 +- .../ZUGFeRD/ZUGFeRDExporterFromPDFA.java | 188 ++++++++++++++++++ 4 files changed, 198 insertions(+), 16 deletions(-) create mode 100644 Mustang-CLI/src/test/resources/EmptyPDFA1.pdf create mode 100644 library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java diff --git a/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java b/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java index b9931cbd..0e676c15 100755 --- a/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java +++ b/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java @@ -21,11 +21,12 @@ package org.mustangproject.commandline; import org.apache.commons.cli.*; import org.mustangproject.CII.CIIToUBL; import org.mustangproject.EStandard; -import org.mustangproject.ZUGFeRD.*; -import org.mustangproject.validator.Validator; -import org.mustangproject.validator.ZUGFeRDValidator; import org.mustangproject.FileAttachment; +import org.mustangproject.ZUGFeRD.*; +import org.mustangproject.validator.ZUGFeRDValidator; +import org.slf4j.LoggerFactory; +import javax.xml.transform.TransformerException; import java.io.*; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -33,15 +34,6 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; -/* - * This is the command line interface to mustangproject - * - */ - -import org.slf4j.LoggerFactory; - -import javax.xml.transform.TransformerException; - public class Main { private static org.slf4j.Logger LOGGER; // log output private static void printUsage() { @@ -716,8 +708,10 @@ public class Main { } } else { - ze = new ZUGFeRDExporterFromA1().setProducer("Mustang-cli") - .setZUGFeRDVersion(standard, zfIntVersion) + ze = new ZUGFeRDExporterFromPDFA().load(pdfName); + + ze.setProducer("Mustang-cli") + .setZUGFeRDVersion(zfIntVersion) .setCreator(System.getProperty("user.name")).setProfile(zfConformanceLevelProfile); if (ignoreInputErrors) { ((ZUGFeRDExporterFromA1) ze).ignorePDFAErrors(); @@ -727,7 +721,7 @@ public class Main { ((ZUGFeRDExporterFromA3) ze).attachFile(attachment.getFilename(), attachment.getData(), attachment.getMimetype(), attachment.getRelation()); } - ze = ze.load(pdfName); +// ze = ze.load(pdfName); if (format.equals("zf")) { ze.disableFacturX(); diff --git a/Mustang-CLI/src/test/resources/EmptyPDFA1.pdf b/Mustang-CLI/src/test/resources/EmptyPDFA1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9c4ae5582f811026979dfb671f1f830045eede1f GIT binary patch literal 87968 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 literal 0 HcmV?d00001 diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExporter.java index 0ac41a97..cff98744 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExporter.java @@ -59,7 +59,7 @@ public interface IZUGFeRDExporter extends Closeable, IExporter { public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException; public IZUGFeRDExporter setXML(byte[] zugferdData) throws IOException; public IZUGFeRDExporter disableFacturX(); -// public IZUGFeRDExporter setProfile(Profile zugferdConformanceLevel); + public IZUGFeRDExporter setProfile(Profile zugferdConformanceLevel); public String getNamespaceForVersion(int ver); public String getPrefixForVersion(int ver) ; public IZUGFeRDExporter disableAutoClose(boolean disableAutoClose); diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java new file mode 100644 index 00000000..942a7ec9 --- /dev/null +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java @@ -0,0 +1,188 @@ +/** + * ********************************************************************* + *

+ * Copyright 2018 Jochen Staerk + *

+ * Use is subject to license terms. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0. + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + *

+ * See the License for the specific language governing permissions and + * limitations under the License. + *

+ * ********************************************************************** + */ +package org.mustangproject.ZUGFeRD; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.xmpbox.XMPMetadata; +import org.apache.xmpbox.schema.PDFAIdentificationSchema; +import org.apache.xmpbox.xml.DomXmpParser; +import org.apache.xmpbox.xml.XmpParsingException; + +import javax.activation.DataSource; +import java.io.*; + +public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter { + protected IZUGFeRDExporter theExporter; + + public IZUGFeRDExporter load(String pdfFilename) throws IOException { + if (getPDFAVersion(fileToByteArrayInputStream(pdfFilename)) < 2) { + theExporter = new ZUGFeRDExporterFromA1(); + } else if (getPDFAVersion(fileToByteArrayInputStream(pdfFilename)) >= 3) { + theExporter = new ZUGFeRDExporterFromA3(); + } + return theExporter.load(pdfFilename); + } + + private byte[] fileToByteArrayInputStream(String pdfFilename) throws IOException { + FileInputStream fileInputStream = new FileInputStream(new File(pdfFilename)); + return fileInputStream.readAllBytes(); + } + + private int getPDFAVersion(byte[] byteArrayInputStream) throws IOException { + // PDFBOX to be here... + PDDocument document = PDDocument.load(byteArrayInputStream); + PDDocumentCatalog catalog = document.getDocumentCatalog(); + //short way to get PDF version + //document.getDocument().getVersion(); + PDMetadata metadata = catalog.getMetadata(); + + if (metadata != null) { + try { + DomXmpParser xmpParser = new DomXmpParser(); + XMPMetadata xmp = xmpParser.parse(metadata.createInputStream()); + + PDFAIdentificationSchema pdfaSchema = xmp.getPDFIdentificationSchema(); + if (pdfaSchema != null) { + return pdfaSchema.getPart(); + } + } catch (XmpParsingException e) { + e.printStackTrace(); + } finally { + document.close(); + } + } + return 0; + } + + /** + * Makes A PDF/A3a-compliant document from a PDF-A1 compliant document (on the + * metadata level, this will not e.g. convert graphics to JPG-2000) + * + * @param pdfBinary binary of a PDF/A1 compliant document + * @return the generated exporter + * @throws IOException (should not happen at all) + */ + public IZUGFeRDExporter load(byte[] pdfBinary) throws IOException { + if (getPDFAVersion(pdfBinary) >= 3) { + theExporter = new ZUGFeRDExporterFromA3(); + } else if (getPDFAVersion(pdfBinary) < 2) { + theExporter = new ZUGFeRDExporterFromA1(); + } + return theExporter.load(pdfBinary); + } + + + /** + * Makes A PDF/A3a-compliant document from a PDF-A1 compliant document (on the + * metadata level, this will not e.g. convert graphics to JPG-2000) + * + * @param pdfSource source to read a PDF/A1 compliant document from + * @return the generated ZUGFeRDExporter + * @throws IOException if anything is wrong with inputstream + */ + public IZUGFeRDExporter load(InputStream pdfSource) throws IOException { + if (getPDFAVersion(pdfSource.readAllBytes()) >= 3) { + theExporter = new ZUGFeRDExporterFromA3(); + } else if (getPDFAVersion(pdfSource.readAllBytes()) < 2) { + theExporter = new ZUGFeRDExporterFromA1(); + } + return theExporter.load(pdfSource); + } + + public IZUGFeRDExporter setCreator(String creator) { + return theExporter.setCreator(creator); + } + + public ZUGFeRDExporterFromPDFA setProfile(Profile p) { + return (ZUGFeRDExporterFromPDFA) theExporter.setProfile(p); + } + + public ZUGFeRDExporterFromPDFA setProfile(String profileName) { + Profile p = Profiles.getByName(profileName); + return (ZUGFeRDExporterFromPDFA) theExporter.setProfile(p); + } + + public IZUGFeRDExporter setConformanceLevel(PDFAConformanceLevel newLevel) { + return theExporter.setConformanceLevel(newLevel); + } + + public IZUGFeRDExporter setProducer(String producer) { + return theExporter.setProducer(producer); + } + + public IZUGFeRDExporter setZUGFeRDVersion(int version) { + + return theExporter.setZUGFeRDVersion(version); + + } + + public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { + return theExporter.ensurePDFIsValid(dataSource); + } + + public IZUGFeRDExporter setXML(byte[] zugferdData) throws IOException { + return theExporter.setXML(zugferdData); + } + + public IZUGFeRDExporter disableFacturX() { + return theExporter.disableFacturX(); + } + + // public IZUGFeRDExporter setProfile(Profile zugferdConformanceLevel); + public String getNamespaceForVersion(int ver) { + return theExporter.getNamespaceForVersion(ver); + } + + public String getPrefixForVersion(int ver) { + return theExporter.getPrefixForVersion(ver); + } + + public IZUGFeRDExporter disableAutoClose(boolean disableAutoClose) { + return theExporter.disableAutoClose(disableAutoClose); + } + + public IXMLProvider getProvider() { + return theExporter.getProvider(); + } + + @Override + public void close() throws IOException { + theExporter.close(); + } + + @Override + public IExporter setTransaction(IExportableTransaction trans) throws IOException { + return theExporter.setTransaction(trans); + } + + @Override + public void export(String ZUGFeRDfilename) throws IOException { + theExporter.export(ZUGFeRDfilename); + } + + @Override + public void export(OutputStream output) throws IOException { + theExporter.export(output); + } +} + From 0d0678b8489a2c0aa1a7daad84caf747302e9d5b Mon Sep 17 00:00:00 2001 From: Martin Wachtveitl Date: Wed, 22 Nov 2023 14:11:12 +0100 Subject: [PATCH 2/3] 341 beta --- library/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/pom.xml b/library/pom.xml index 960e678c..67287019 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -158,8 +158,8 @@ - 8 - 8 + 9 + 9 From 43241eaa7a5a4b1b11a654b7d9c242bb2c7d8eaf Mon Sep 17 00:00:00 2001 From: Martin Wachtveitl Date: Wed, 22 Nov 2023 14:15:15 +0100 Subject: [PATCH 3/3] 341 beta --- .../org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java index 942a7ec9..8830eb10 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java @@ -44,7 +44,7 @@ public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter { } private byte[] fileToByteArrayInputStream(String pdfFilename) throws IOException { - FileInputStream fileInputStream = new FileInputStream(new File(pdfFilename)); + FileInputStream fileInputStream = new FileInputStream(pdfFilename); return fileInputStream.readAllBytes(); } @@ -52,8 +52,6 @@ public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter { // PDFBOX to be here... PDDocument document = PDDocument.load(byteArrayInputStream); PDDocumentCatalog catalog = document.getDocumentCatalog(); - //short way to get PDF version - //document.getDocument().getVersion(); PDMetadata metadata = catalog.getMetadata(); if (metadata != null) {