diff --git a/Mustang-CLI/pom.xml b/Mustang-CLI/pom.xml index 5e4d939a..4ec10658 100644 --- a/Mustang-CLI/pom.xml +++ b/Mustang-CLI/pom.xml @@ -3,14 +3,14 @@ org.mustangproject core - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT 4.0.0 org.mustangproject Mustang-CLI e-invoices commandline tool, allowing to create(embed), split and validate Factur-X/ZUGFeRD files. Validation should also work for XRechnung/CII. jar - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT UTF-8 8 @@ -21,7 +21,7 @@ org.mustangproject validator - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/library/pom.xml b/library/pom.xml index 02a91571..8602afe9 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -3,13 +3,13 @@ org.mustangproject core - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT 4.0.0 org.mustangproject library - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT jar Library to write, read and validate e-invoices (Factur-X, ZUGFeRD, Order-X, XRechnung/CII) FOSS Java library to read, write and validate european electronic invoices and orders in the UN/CEFACT Cross Industry Invoice based formats Factur-X/ZUGFeRD, XRechnung and Order-X in your invoice PDFs. @@ -56,12 +56,12 @@ net.sf.saxon Saxon-HE - 9.9.0-1 + 12.4 com.fasterxml.jackson.core jackson-databind - 2.14.2 + 2.17.1 @@ -71,36 +71,36 @@ - javax.activation - activation - 1.1.1 + org.eclipse.angus + angus-activation + 2.0.2 org.apache.pdfbox preflight - 2.0.27 + 3.0.2 org.apache.pdfbox pdfbox - 2.0.27 + 3.0.2 org.dom4j dom4j - 2.1.3 + 2.1.4 org.junit.jupiter junit-jupiter-api - 5.9.1 + 5.10.2 test org.junit.vintage junit-vintage-engine - 5.9.1 + 5.10.2 test @@ -108,13 +108,13 @@ com.helger en16931-cii2ubl - 1.4.10 + 2.2.4 org.glassfish.jaxb jaxb-runtime - 2.3.3 + 4.0.5 @@ -127,16 +127,9 @@ org.xmlunit xmlunit-assertj - 2.9.1 + 2.10.0 test - - - jakarta.xml.bind - jakarta.xml.bind-api - 2.3.3 - - diff --git a/library/src/main/java/org/mustangproject/CII/CIIToUBL.java b/library/src/main/java/org/mustangproject/CII/CIIToUBL.java index 733006a1..ff695f52 100644 --- a/library/src/main/java/org/mustangproject/CII/CIIToUBL.java +++ b/library/src/main/java/org/mustangproject/CII/CIIToUBL.java @@ -5,9 +5,9 @@ import java.io.Serializable; import com.helger.commons.error.list.ErrorList; import com.helger.en16931.cii2ubl.CIIToUBL23Converter; -import com.helger.ubl21.UBL21Writer; -import com.helger.ubl22.UBL22Writer; -import com.helger.ubl23.UBL23Writer; +import com.helger.ubl21.UBL21Marshaller; +import com.helger.ubl22.UBL22Marshaller; +import com.helger.ubl23.UBL23Marshaller; /*** * converts a Cross Industry Invoice XML file to a UBL XML file @@ -25,37 +25,37 @@ public class CIIToUBL { final Serializable aUBL = cc.convertCIItoUBL(input, occurred); if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_21.InvoiceType) { - UBL21Writer.invoice () + UBL21Marshaller.invoice () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.invoice_21.InvoiceType) aUBL, output); } else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_21.CreditNoteType) { - UBL21Writer.creditNote () + UBL21Marshaller.creditNote () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.creditnote_21.CreditNoteType) aUBL, output); } else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_22.InvoiceType) { - UBL22Writer.invoice () + UBL22Marshaller.invoice () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.invoice_22.InvoiceType) aUBL, output); } else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_22.CreditNoteType) { - UBL22Writer.creditNote () + UBL22Marshaller.creditNote () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.creditnote_22.CreditNoteType) aUBL, output); } else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_23.InvoiceType) { - UBL23Writer.invoice () + UBL23Marshaller.invoice () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.invoice_23.InvoiceType) aUBL, output); } else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_23.CreditNoteType) { - UBL23Writer.creditNote () + UBL23Marshaller.creditNote () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.creditnote_23.CreditNoteType) aUBL, output); } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/DAPullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/DAPullProvider.java index 36a564bc..7ae56ebd 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/DAPullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/DAPullProvider.java @@ -28,7 +28,10 @@ import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; -import org.mustangproject.*; +import org.mustangproject.EStandard; +import org.mustangproject.FileAttachment; +import org.mustangproject.Invoice; +import org.mustangproject.XMLTools; public class DAPullProvider extends ZUGFeRD2PullProvider implements IXMLProvider { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA1.java b/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA1.java index 7123cd39..2f9669a8 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA1.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA1.java @@ -19,13 +19,15 @@ package org.mustangproject.ZUGFeRD; +import java.io.IOException; +import java.io.InputStream; + import org.apache.pdfbox.preflight.PreflightDocument; +import org.apache.pdfbox.preflight.ValidationResult; import org.apache.pdfbox.preflight.exception.ValidationException; import org.apache.pdfbox.preflight.parser.PreflightParser; -import javax.activation.DataSource; -import java.io.IOException; -import java.io.InputStream; +import jakarta.activation.DataSource; public class DXExporterFromA1 extends DXExporterFromA3 implements IZUGFeRDExporter { protected boolean ignorePDFAErrors = false; @@ -36,7 +38,7 @@ public class DXExporterFromA1 extends DXExporterFromA3 implements IZUGFeRDExport } private static boolean isValidA1(DataSource dataSource) throws IOException { - return getPDFAParserValidationResult(new PreflightParser(dataSource)); + return getPDFAParserValidationResult(PreflightParserHelper.createPreflightParser (dataSource)); } /*** * internal helper function: get namespace for order-x @@ -65,19 +67,19 @@ public class DXExporterFromA1 extends DXExporterFromA3 implements IZUGFeRDExport * NonSequentialParser. Some additional controls are present to check a set of * PDF/A requirements. (Stream length consistency, EOL after some Keyword...) */ - parser.parse();// might add a Format.PDF_A1A as parameter and iterate through A1 and A3 - - try (PreflightDocument document = parser.getPreflightDocument()) { + // might add a Format.PDF_A1A as parameter and iterate through A1 and A3 + + try (PreflightDocument document = (PreflightDocument) parser.parse()) { /* * Once the syntax validation is done, the parser can provide a * PreflightDocument (that inherits from PDDocument) This document process the * end of PDF/A validation. */ - document.validate(); + ValidationResult res = document.validate(); // Get validation result - return document.getResult().isValid(); + return res.isValid(); } catch (ValidationException e) { /* * the parse method can throw a SyntaxValidationException if the PDF file can't diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA3.java index 1e22166c..50aff364 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA3.java @@ -20,16 +20,38 @@ */ package org.mustangproject.ZUGFeRD; -import org.apache.pdfbox.cos.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.transform.TransformerException; + +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; import org.apache.pdfbox.io.IOUtils; -import org.apache.pdfbox.pdmodel.*; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +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.documentinterchange.logicalstructure.PDMarkInfo; import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot; import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent; -import org.apache.pdfbox.preflight.utils.ByteArrayDataSource; import org.apache.xmpbox.XMPMetadata; import org.apache.xmpbox.schema.AdobePDFSchema; import org.apache.xmpbox.schema.DublinCoreSchema; @@ -43,11 +65,8 @@ import org.apache.xmpbox.xml.XmpSerializer; import org.mustangproject.EStandard; import org.mustangproject.FileAttachment; -import javax.activation.DataSource; -import javax.activation.FileDataSource; -import javax.xml.transform.TransformerException; -import java.io.*; -import java.util.*; +import jakarta.activation.DataSource; +import jakarta.activation.FileDataSource; public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { @@ -163,7 +182,7 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { */ public DXExporterFromA3 load(byte[] pdfBinary) throws IOException { ensurePDFIsValid(new ByteArrayDataSource(new ByteArrayInputStream(pdfBinary))); - doc = PDDocument.load(pdfBinary); + doc = Loader.loadPDF(pdfBinary); return this; } @@ -542,13 +561,13 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { } protected PDFAIdentificationSchema getPDFAIdentificationSchema(XMPMetadata xmp) { - PDFAIdentificationSchema pdfaid = xmp.getPDFIdentificationSchema(); + PDFAIdentificationSchema pdfaid = xmp.getPDFAIdentificationSchema(); if (pdfaid != null) if (overwrite) xmp.removeSchema(pdfaid); else return pdfaid; - return xmp.createAndAddPFAIdentificationSchema(); + return xmp.createAndAddPDFAIdentificationSchema(); } protected void writeDublinCoreSchema(XMPMetadata xmp) { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/EinLieferscheinExporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/EinLieferscheinExporter.java index 609755e1..b2e166e3 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/EinLieferscheinExporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/EinLieferscheinExporter.java @@ -20,31 +20,10 @@ */ package org.mustangproject.ZUGFeRD; -import org.apache.pdfbox.cos.*; -import org.apache.pdfbox.io.IOUtils; -import org.apache.pdfbox.pdmodel.*; -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.preflight.PreflightDocument; -import org.apache.pdfbox.preflight.exception.ValidationException; -import org.apache.pdfbox.preflight.parser.PreflightParser; -import org.apache.pdfbox.preflight.utils.ByteArrayDataSource; -import org.apache.xmpbox.XMPMetadata; -import org.apache.xmpbox.schema.AdobePDFSchema; -import org.apache.xmpbox.schema.DublinCoreSchema; -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 javax.activation.DataSource; -import javax.activation.FileDataSource; -import javax.xml.transform.TransformerException; -import java.io.*; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.Map; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; public class EinLieferscheinExporter implements IExporter { IXMLProvider xmlProvider; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IExporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IExporter.java index 095037a4..7f30f81b 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IExporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IExporter.java @@ -18,7 +18,6 @@ *********************************************************************** */ package org.mustangproject.ZUGFeRD; -import java.io.Closeable; import java.io.IOException; import java.io.OutputStream; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDAllowanceCharge.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDAllowanceCharge.java index fe854be7..75b01a67 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDAllowanceCharge.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDAllowanceCharge.java @@ -15,10 +15,10 @@ */ package org.mustangproject.ZUGFeRD; -import org.mustangproject.ZUGFeRD.model.TaxCategoryCodeTypeConstants; - import java.math.BigDecimal; +import org.mustangproject.ZUGFeRD.model.TaxCategoryCodeTypeConstants; + /** * The interface for allowances or charges, to be used by the pullprovider * @author AlexanderSchmidt diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDCashDiscount.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDCashDiscount.java index 90040a50..5d5fff13 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDCashDiscount.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDCashDiscount.java @@ -1,7 +1,5 @@ package org.mustangproject.ZUGFeRD; -import org.mustangproject.XMLTools; - public interface IZUGFeRDCashDiscount { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java index 1a2b5300..53cc71b1 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java @@ -26,12 +26,13 @@ package org.mustangproject.ZUGFeRD; * @author jstaerk * */ -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import org.mustangproject.Item; - import java.math.BigDecimal; import java.util.Date; +import org.mustangproject.Item; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + @JsonDeserialize(as = Item.class) public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{ IZUGFeRDExportableProduct getProduct(); diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTradeParty.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTradeParty.java index e097ad86..8af10dbb 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTradeParty.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTradeParty.java @@ -20,8 +20,6 @@ */ package org.mustangproject.ZUGFeRD; -import org.mustangproject.TradeParty; - /** * Mustangproject's ZUGFeRD implementation neccessary interface for ZUGFeRD exporter Licensed under the APLv2 * diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExporter.java index cff98744..f056da5c 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExporter.java @@ -18,11 +18,12 @@ *********************************************************************** */ package org.mustangproject.ZUGFeRD; -import javax.activation.DataSource; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; +import jakarta.activation.DataSource; + public interface IZUGFeRDExporter extends Closeable, IExporter { /** * factory: loads a PDF file and returns an appropriate exporter diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDLegalOrganisation.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDLegalOrganisation.java index 3ba722d9..9de017cf 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDLegalOrganisation.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDLegalOrganisation.java @@ -18,11 +18,6 @@ *********************************************************************** */ package org.mustangproject.ZUGFeRD; -import javax.activation.DataSource; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; - public interface IZUGFeRDLegalOrganisation { /*** diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/JakartaUpdateMitigation.java b/library/src/main/java/org/mustangproject/ZUGFeRD/JakartaUpdateMitigation.java new file mode 100644 index 00000000..203b5b45 --- /dev/null +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/JakartaUpdateMitigation.java @@ -0,0 +1,104 @@ +package org.mustangproject.ZUGFeRD; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.EOFException; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.RandomAccessFile; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.RandomAccessRead; +import org.apache.pdfbox.io.RandomAccessReadBuffer; +import org.apache.pdfbox.preflight.parser.PreflightParser; + +import jakarta.activation.DataSource; + +// Copied from PDFBox preflight 2.0.x +final class ByteArrayDataSource implements DataSource +{ + private ByteArrayOutputStream data; + private String type = null; + private String name = null; + + public ByteArrayDataSource (InputStream is) throws IOException + { + data = new ByteArrayOutputStream (); + IOUtils.copy (is, data); + IOUtils.closeQuietly (is); + } + + public String getContentType () + { + return this.type; + } + + /** + * @param type + * the type to set + */ + public void setType (String type) + { + this.type = type; + } + + /** + * @param name + * the name to set + */ + public void setName (String name) + { + this.name = name; + } + + public InputStream getInputStream () throws IOException + { + return new ByteArrayInputStream (data.toByteArray ()); + } + + public String getName () + { + return this.name; + } + + public OutputStream getOutputStream () throws IOException + { + this.data = new ByteArrayOutputStream (); + return data; + } +} + +final class PreflightParserHelper +{ + private static File createTmpFile (InputStream input) throws IOException + { + FileOutputStream fos = null; + try + { + File tmpFile = File.createTempFile ("mustang-pdf", ".pdf"); + fos = new FileOutputStream (tmpFile); + IOUtils.copy (input, fos); + return tmpFile; + } + finally + { + IOUtils.closeQuietly (input); + IOUtils.closeQuietly (fos); + } + } + + public static PreflightParser createPreflightParser (DataSource dataSource) throws IOException + { + return new PreflightParser (createTmpFile (dataSource.getInputStream ())); + } +} + +final class JakartaUpdateMitigation +{ + // Dummy for the name only +} diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA1.java b/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA1.java index 1805cc95..4b91f192 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA1.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA1.java @@ -19,13 +19,15 @@ package org.mustangproject.ZUGFeRD; +import java.io.IOException; +import java.io.InputStream; + import org.apache.pdfbox.preflight.PreflightDocument; +import org.apache.pdfbox.preflight.ValidationResult; import org.apache.pdfbox.preflight.exception.ValidationException; import org.apache.pdfbox.preflight.parser.PreflightParser; -import javax.activation.DataSource; -import java.io.IOException; -import java.io.InputStream; +import jakarta.activation.DataSource; public class OXExporterFromA1 extends OXExporterFromA3 implements IZUGFeRDExporter { protected boolean ignorePDFAErrors = false; @@ -36,7 +38,7 @@ public class OXExporterFromA1 extends OXExporterFromA3 implements IZUGFeRDExport } private static boolean isValidA1(DataSource dataSource) throws IOException { - return getPDFAParserValidationResult(new PreflightParser(dataSource)); + return getPDFAParserValidationResult(PreflightParserHelper.createPreflightParser(dataSource)); } /*** * internal helper function: get namespace for order-x @@ -61,19 +63,19 @@ public class OXExporterFromA1 extends OXExporterFromA3 implements IZUGFeRDExport * NonSequentialParser. Some additional controls are present to check a set of * PDF/A requirements. (Stream length consistency, EOL after some Keyword...) */ - parser.parse();// might add a Format.PDF_A1A as parameter and iterate through A1 and A3 + // might add a Format.PDF_A1A as parameter and iterate through A1 and A3 - try (PreflightDocument document = parser.getPreflightDocument()) { + try (PreflightDocument document = (PreflightDocument) parser.parse()) { /* * Once the syntax validation is done, the parser can provide a * PreflightDocument (that inherits from PDDocument) This document process the * end of PDF/A validation. */ - document.validate(); + ValidationResult res = document.validate(); // Get validation result - return document.getResult().isValid(); + return res.isValid(); } catch (ValidationException e) { /* * the parse method can throw a SyntaxValidationException if the PDF file can't diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA3.java index 92433b46..b326cf22 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA3.java @@ -20,20 +20,38 @@ */ package org.mustangproject.ZUGFeRD; -import org.apache.pdfbox.cos.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.transform.TransformerException; + +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; import org.apache.pdfbox.io.IOUtils; -import org.apache.pdfbox.pdmodel.*; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +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.documentinterchange.logicalstructure.PDMarkInfo; import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot; -import org.apache.pdfbox.pdmodel.font.PDCIDFontType2; -import org.apache.pdfbox.pdmodel.font.PDFont; -import org.apache.pdfbox.pdmodel.font.PDFontDescriptor; -import org.apache.pdfbox.pdmodel.font.PDType0Font; import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent; -import org.apache.pdfbox.preflight.utils.ByteArrayDataSource; import org.apache.xmpbox.XMPMetadata; import org.apache.xmpbox.schema.AdobePDFSchema; import org.apache.xmpbox.schema.DublinCoreSchema; @@ -47,11 +65,8 @@ import org.apache.xmpbox.xml.XmpSerializer; import org.mustangproject.EStandard; import org.mustangproject.FileAttachment; -import javax.activation.DataSource; -import javax.activation.FileDataSource; -import javax.xml.transform.TransformerException; -import java.io.*; -import java.util.*; +import jakarta.activation.DataSource; +import jakarta.activation.FileDataSource; public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { @@ -167,7 +182,7 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { */ public OXExporterFromA3 load(byte[] pdfBinary) throws IOException { ensurePDFIsValid(new ByteArrayDataSource(new ByteArrayInputStream(pdfBinary))); - doc = PDDocument.load(pdfBinary); + doc = Loader.loadPDF(pdfBinary); return this; } @@ -536,13 +551,13 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { } protected PDFAIdentificationSchema getPDFAIdentificationSchema(XMPMetadata xmp) { - PDFAIdentificationSchema pdfaid = xmp.getPDFIdentificationSchema(); + PDFAIdentificationSchema pdfaid = xmp.getPDFAIdentificationSchema(); if (pdfaid != null) if (overwrite) xmp.removeSchema(pdfaid); else return pdfaid; - return xmp.createAndAddPFAIdentificationSchema(); + return xmp.createAndAddPDFAIdentificationSchema(); } protected void writeDublinCoreSchema(XMPMetadata xmp) { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java index 9ea90e19..eabf2a14 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java @@ -27,18 +27,14 @@ import static org.mustangproject.ZUGFeRD.model.TaxCategoryCodeTypeConstants.CATE import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Base64; import java.util.Date; -import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.stream.Collectors; import org.mustangproject.EStandard; import org.mustangproject.FileAttachment; -import org.mustangproject.IncludedNote; import org.mustangproject.XMLTools; public class OXPullProvider extends ZUGFeRD2PullProvider implements IXMLProvider { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/Profiles.java b/library/src/main/java/org/mustangproject/ZUGFeRD/Profiles.java index 1e70462f..3d73e7ac 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/Profiles.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/Profiles.java @@ -20,12 +20,12 @@ */ package org.mustangproject.ZUGFeRD; -import org.mustangproject.EStandard; - import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.mustangproject.EStandard; + public class Profiles { static Map zf2Map = Stream.of(new Object[][]{ {"MINIMUM", new Profile("MINIMUM", "urn:factur-x.eu:1p0:minimum")}, diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/UBLDAPullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/UBLDAPullProvider.java index 22f59db2..f6ed2993 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/UBLDAPullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/UBLDAPullProvider.java @@ -20,32 +20,22 @@ */ package org.mustangproject.ZUGFeRD; +import java.io.IOException; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.logging.Level; +import java.util.logging.Logger; + import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import org.mustangproject.EStandard; -import org.mustangproject.FileAttachment; -import org.mustangproject.TradeParty; import org.mustangproject.XMLTools; -import java.io.IOException; -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; -import java.math.BigDecimal; -import java.nio.charset.StandardCharsets; -import java.text.SimpleDateFormat; -import java.util.Base64; -import java.util.Date; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import static org.mustangproject.ZUGFeRD.ZUGFeRDDateFormat.DATE; -import static org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants.CORRECTEDINVOICE; -import static org.mustangproject.ZUGFeRD.model.TaxCategoryCodeTypeConstants.CATEGORY_CODES_WITH_EXEMPTION_REASON; - public class UBLDAPullProvider implements IXMLProvider { protected IExportableTransaction trans; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/XMLUpgrader.java b/library/src/main/java/org/mustangproject/ZUGFeRD/XMLUpgrader.java index 9ea78955..04934a4f 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/XMLUpgrader.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/XMLUpgrader.java @@ -1,9 +1,20 @@ package org.mustangproject.ZUGFeRD; -import javax.xml.transform.*; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; + +import javax.xml.transform.Source; +import javax.xml.transform.Templates; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.URIResolver; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; -import java.io.*; /*** diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/XMPSchemaPDFAExtensions.java b/library/src/main/java/org/mustangproject/ZUGFeRD/XMPSchemaPDFAExtensions.java index 2bfe9ad2..567cd300 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/XMPSchemaPDFAExtensions.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/XMPSchemaPDFAExtensions.java @@ -30,7 +30,15 @@ package org.mustangproject.ZUGFeRD; import org.apache.xmpbox.XMPMetadata; import org.apache.xmpbox.XmpConstants; import org.apache.xmpbox.schema.PDFAExtensionSchema; -import org.apache.xmpbox.type.*; +import org.apache.xmpbox.type.ArrayProperty; +import org.apache.xmpbox.type.Attribute; +import org.apache.xmpbox.type.Cardinality; +import org.apache.xmpbox.type.ChoiceType; +import org.apache.xmpbox.type.DefinedStructuredType; +import org.apache.xmpbox.type.PDFAPropertyType; +import org.apache.xmpbox.type.PDFASchemaType; +import org.apache.xmpbox.type.StructuredType; +import org.apache.xmpbox.type.TextType; import org.mustangproject.EStandard; /** diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/XRExporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/XRExporter.java index 24c2a8be..5c2fa2a3 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/XRExporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/XRExporter.java @@ -20,31 +20,10 @@ */ package org.mustangproject.ZUGFeRD; -import org.apache.pdfbox.cos.*; -import org.apache.pdfbox.io.IOUtils; -import org.apache.pdfbox.pdmodel.*; -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.preflight.PreflightDocument; -import org.apache.pdfbox.preflight.exception.ValidationException; -import org.apache.pdfbox.preflight.parser.PreflightParser; -import org.apache.pdfbox.preflight.utils.ByteArrayDataSource; -import org.apache.xmpbox.XMPMetadata; -import org.apache.xmpbox.schema.AdobePDFSchema; -import org.apache.xmpbox.schema.DublinCoreSchema; -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 javax.activation.DataSource; -import javax.activation.FileDataSource; -import javax.xml.transform.TransformerException; -import java.io.*; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.Map; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; public class XRExporter implements IExporter { IXMLProvider xmlProvider; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/XRechnungImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/XRechnungImporter.java index 069c6e57..ab476e86 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/XRechnungImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/XRechnungImporter.java @@ -1,8 +1,5 @@ package org.mustangproject.ZUGFeRD; -import org.mustangproject.XMLTools; - -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; @@ -10,6 +7,8 @@ import java.nio.file.Paths; import java.util.logging.Level; import java.util.logging.Logger; +import org.mustangproject.XMLTools; + public class XRechnungImporter extends ZUGFeRDImporter { public XRechnungImporter(byte[] rawXml) { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA1.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA1.java index c8c7caba..72bda71d 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA1.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA1.java @@ -19,14 +19,16 @@ package org.mustangproject.ZUGFeRD; +import java.io.IOException; +import java.io.InputStream; + import org.apache.pdfbox.preflight.PreflightDocument; +import org.apache.pdfbox.preflight.ValidationResult; import org.apache.pdfbox.preflight.exception.ValidationException; import org.apache.pdfbox.preflight.parser.PreflightParser; import org.mustangproject.EStandard; -import javax.activation.DataSource; -import java.io.IOException; -import java.io.InputStream; +import jakarta.activation.DataSource; public class ZUGFeRDExporterFromA1 extends ZUGFeRDExporterFromA3 implements IZUGFeRDExporter { protected boolean ignorePDFAErrors = false; @@ -37,7 +39,7 @@ public class ZUGFeRDExporterFromA1 extends ZUGFeRDExporterFromA3 implements IZUG } private static boolean isValidA1(DataSource dataSource) throws IOException { - return getPDFAParserValidationResult(new PreflightParser(dataSource)); + return getPDFAParserValidationResult(PreflightParserHelper.createPreflightParser(dataSource)); } private static boolean getPDFAParserValidationResult(PreflightParser parser) throws IOException { @@ -46,19 +48,19 @@ public class ZUGFeRDExporterFromA1 extends ZUGFeRDExporterFromA3 implements IZUG * NonSequentialParser. Some additional controls are present to check a set of * PDF/A requirements. (Stream length consistency, EOL after some Keyword...) */ - parser.parse();// might add a Format.PDF_A1A as parameter and iterate through A1 and A3 + // might add a Format.PDF_A1A as parameter and iterate through A1 and A3 - try (PreflightDocument document = parser.getPreflightDocument()) { + try (PreflightDocument document = (PreflightDocument) parser.parse()) { /* * Once the syntax validation is done, the parser can provide a * PreflightDocument (that inherits from PDDocument) This document process the * end of PDF/A validation. */ - document.validate(); + ValidationResult res = document.validate(); // Get validation result - return document.getResult().isValid(); + return res.isValid(); } catch (ValidationException e) { /* * the parse method can throw a SyntaxValidationException if the PDF file can't diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java index bc687aa7..bf884f8d 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java @@ -20,9 +20,35 @@ */ package org.mustangproject.ZUGFeRD; -import org.apache.pdfbox.cos.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.transform.TransformerException; + +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; import org.apache.pdfbox.io.IOUtils; -import org.apache.pdfbox.pdmodel.*; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary; +import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; import org.apache.pdfbox.pdmodel.common.PDMetadata; import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; @@ -33,7 +59,6 @@ import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDFontDescriptor; import org.apache.pdfbox.pdmodel.font.PDType0Font; import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent; -import org.apache.pdfbox.preflight.utils.ByteArrayDataSource; import org.apache.xmpbox.XMPMetadata; import org.apache.xmpbox.schema.AdobePDFSchema; import org.apache.xmpbox.schema.DublinCoreSchema; @@ -47,11 +72,8 @@ import org.apache.xmpbox.xml.XmpSerializer; import org.mustangproject.EStandard; import org.mustangproject.FileAttachment; -import javax.activation.DataSource; -import javax.activation.FileDataSource; -import javax.xml.transform.TransformerException; -import java.io.*; -import java.util.*; +import jakarta.activation.DataSource; +import jakarta.activation.FileDataSource; public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporter, IExporter, Closeable { private boolean isFacturX = true; @@ -258,7 +280,7 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte */ public ZUGFeRDExporterFromA3 load(byte[] pdfBinary) throws IOException { ensurePDFIsValid(new ByteArrayDataSource(new ByteArrayInputStream(pdfBinary))); - doc = PDDocument.load(pdfBinary); + doc = Loader.loadPDF(pdfBinary); return this; } @@ -713,13 +735,13 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte } protected PDFAIdentificationSchema getPDFAIdentificationSchema(XMPMetadata xmp) { - PDFAIdentificationSchema pdfaid = xmp.getPDFIdentificationSchema(); + PDFAIdentificationSchema pdfaid = xmp.getPDFAIdentificationSchema(); if (pdfaid != null) if (overwrite) xmp.removeSchema(pdfaid); else return pdfaid; - return xmp.createAndAddPFAIdentificationSchema(); + return xmp.createAndAddPDFAIdentificationSchema(); } protected void writeDublinCoreSchema(XMPMetadata xmp) { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java index 02067215..dfddc090 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java @@ -20,6 +20,13 @@ */ package org.mustangproject.ZUGFeRD; +import java.io.DataInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.pdfbox.Loader; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentCatalog; import org.apache.pdfbox.pdmodel.common.PDMetadata; @@ -30,8 +37,7 @@ import org.apache.xmpbox.xml.XmpParsingException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.activation.DataSource; -import java.io.*; +import jakarta.activation.DataSource; /*** * Auto-detects the source PDF-A-Version and acts accordingly @@ -79,7 +85,7 @@ public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter { * @throws IOException */ private int getPDFAVersion(byte[] byteArrayInputStream) throws IOException { - PDDocument document = PDDocument.load(byteArrayInputStream); + PDDocument document = Loader.loadPDF(byteArrayInputStream); PDDocumentCatalog catalog = document.getDocumentCatalog(); PDMetadata metadata = catalog.getMetadata(); // the PDF version we could get through the document but we want the PDF-A version, @@ -89,7 +95,7 @@ public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter { DomXmpParser xmpParser = new DomXmpParser(); XMPMetadata xmp = xmpParser.parse(metadata.createInputStream()); - PDFAIdentificationSchema pdfaSchema = xmp.getPDFIdentificationSchema(); + PDFAIdentificationSchema pdfaSchema = xmp.getPDFAIdentificationSchema(); if (pdfaSchema != null) { return pdfaSchema.getPart(); } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index 6cc33371..58b7fd5a 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -23,7 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; @@ -36,6 +42,8 @@ import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.io.IOUtils; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary; import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode; @@ -115,7 +123,7 @@ public class ZUGFeRDImporter { if (Arrays.equals(pad, pdfSignature)) { // we have a pdf - try (PDDocument doc = PDDocument.load(pdfStream)) { + try (PDDocument doc = Loader.loadPDF(IOUtils.toByteArray (pdfStream))) { // PDDocumentInformation info = doc.getDocumentInformation(); final PDDocumentNameDictionary names = new PDDocumentNameDictionary(doc.getDocumentCatalog()); //start diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java index 13a693f0..33eaf0c9 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java @@ -3,11 +3,9 @@ package org.mustangproject.ZUGFeRD; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; -import java.math.RoundingMode; import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; import javax.xml.xpath.XPath; @@ -16,7 +14,14 @@ import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; -import org.mustangproject.*; +import org.mustangproject.Allowance; +import org.mustangproject.BankDetails; +import org.mustangproject.Charge; +import org.mustangproject.EStandard; +import org.mustangproject.Invoice; +import org.mustangproject.Item; +import org.mustangproject.TradeParty; +import org.mustangproject.XMLTools; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Node; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java index b5da00ba..c9431b2b 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java @@ -20,30 +20,50 @@ */ package org.mustangproject.ZUGFeRD; -import org.apache.fop.apps.*; -import org.apache.fop.apps.io.ResourceResolverFactory; -import org.apache.fop.configuration.Configuration; -import org.apache.fop.configuration.ConfigurationException; -import org.apache.fop.configuration.DefaultConfigurationBuilder; -import org.apache.xmlgraphics.util.MimeConstants; -import org.mustangproject.CII.CIIToUBL; -import org.mustangproject.ClasspathResolverURIAdapter; -import org.xml.sax.SAXException; - -import javax.xml.transform.*; -import javax.xml.transform.sax.SAXResult; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -import java.io.*; -import java.net.URI; -import java.net.URISyntaxException; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; +import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.logging.Level; import java.util.logging.Logger; +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.transform.Templates; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.URIResolver; +import javax.xml.transform.sax.SAXResult; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; + +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.apps.Fop; +import org.apache.fop.apps.FopFactory; +import org.apache.fop.apps.FopFactoryBuilder; +import org.apache.fop.apps.io.ResourceResolverFactory; +import org.apache.fop.configuration.Configuration; +import org.apache.fop.configuration.ConfigurationException; +import org.apache.fop.configuration.DefaultConfigurationBuilder; +import org.apache.xmlgraphics.util.MimeConstants; +import org.mustangproject.ClasspathResolverURIAdapter; +import org.mustangproject.CII.CIIToUBL; + public class ZUGFeRDVisualizer { public enum Language { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java index 3d6f27a0..16925115 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java @@ -21,6 +21,7 @@ package org.mustangproject.ZUGFeRD; import junit.framework.Test; import junit.framework.TestSuite; +import org.apache.pdfbox.Loader; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.common.PDMetadata; import org.apache.xmpbox.XMPMetadata; @@ -252,7 +253,7 @@ public class MustangReaderWriterEdgeTest extends MustangReaderTestCase { setupPdfUnderTest(SOURCE_PDF, TARGET_PDF); // now check the contents - PDDocument doc = PDDocument.load(new File(TARGET_PDF)); + PDDocument doc = Loader.loadPDF(new File(TARGET_PDF)); PDMetadata meta = doc.getDocumentCatalog().getMetadata(); assertNotNull("The pdf must contain XMPMetadata", meta); @@ -262,7 +263,7 @@ public class MustangReaderWriterEdgeTest extends MustangReaderTestCase { DomXmpParser xmpParser = new DomXmpParser(); XMPMetadata xmp = xmpParser.parse(xmpBytes); - PDFAIdentificationSchema pdfai = xmp.getPDFIdentificationSchema(); + PDFAIdentificationSchema pdfai = xmp.getPDFAIdentificationSchema(); assertNotNull("The pdf must contain a PDFIdentificationSchema", pdfai); assertTrue("The PDF/A conformance must be A, B or U", diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java index 52cf151a..b8dae9bb 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java @@ -21,6 +21,7 @@ package org.mustangproject.ZUGFeRD; import junit.framework.Test; import junit.framework.TestSuite; +import org.apache.pdfbox.Loader; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.common.PDMetadata; import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException; @@ -328,13 +329,13 @@ public class MustangReaderWriterTest extends MustangReaderTestCase { } private void checkPdfA3B(File tempFile) throws IOException, InvalidPasswordException { - try (PDDocument doc = PDDocument.load(tempFile)) { + try (PDDocument doc = Loader.loadPDF(tempFile)) { PDMetadata metadata = doc.getDocumentCatalog().getMetadata(); InputStream exportXMPMetadata = metadata.exportXMPMetadata(); byte[] xmpBytes = new byte[exportXMPMetadata.available()]; exportXMPMetadata.read(xmpBytes); final XMPMetadata xmp = new DomXmpParser().parse(xmpBytes); - PDFAIdentificationSchema pdfaid = xmp.getPDFIdentificationSchema(); + PDFAIdentificationSchema pdfaid = xmp.getPDFAIdentificationSchema(); assertEquals(pdfaid.getPart().intValue(), 3); assertEquals(pdfaid.getConformance(), "U"); } catch (XmpParsingException e) { diff --git a/pom.xml b/pom.xml index 10feb62d..941db51e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.mustangproject core - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT pom Mustang @@ -118,9 +118,9 @@ github -Xdoclint:none - 1.8 - 1.8 - 1.8 + 11 + 11 + 11 true @@ -199,7 +199,7 @@ - 8 + 11 adopt diff --git a/validator/pom.xml b/validator/pom.xml index 0d6dabf0..6f35fd21 100644 --- a/validator/pom.xml +++ b/validator/pom.xml @@ -3,7 +3,7 @@ org.mustangproject core - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT 4.0.0 org.mustangproject @@ -11,7 +11,7 @@ Library to validate e-invoices (ZUGFeRD, Factur-X and Xrechnung) jar - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT @@ -38,7 +38,7 @@ ${project.groupId} library - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT @@ -98,7 +98,7 @@ org.mustangproject library - 2.11.1-SNAPSHOT + 3.0.0-SNAPSHOT org.xmlunit