Package org.mustangproject.ZUGFeRD
Class DXExporterFromA3
- java.lang.Object
-
- org.mustangproject.ZUGFeRD.XRExporter
-
- org.mustangproject.ZUGFeRD.ZUGFeRDExporterFromA3
-
- org.mustangproject.ZUGFeRD.DXExporterFromA3
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,IExporter,IZUGFeRDExporter
- Direct Known Subclasses:
DXExporterFromA1
public class DXExporterFromA3 extends ZUGFeRDExporterFromA3
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.StringauthorDeprecated.author is never set yetprotected PDFAConformanceLevelconformanceLevelprotected java.lang.StringcreatorAuthor/Creator attribute for PDFprotected java.lang.StringcreatorToolCreatorToolprotected java.lang.StringdespatchAdviceDocumentTypeOrderX document type.protected java.util.ArrayList<FileAttachment>fileAttachmentsprotected org.apache.pdfbox.pdmodel.common.PDMetadatametadataData (XML invoice) to be added to the ZUGFeRD PDF.protected booleanoverwriteThis flag controls whether or not the metadata is overwritten, or kind of merged.protected java.lang.StringproducerProducer attribute for PDFprotected java.lang.StringsubjectDeprecated.subject is never set yetprotected java.lang.StringtitleDeprecated.title is never set yet-
Fields inherited from class org.mustangproject.ZUGFeRD.ZUGFeRDExporterFromA3
DefaultZUGFeRDVersion, doc, ignorePDFAErrors, xmp, XRechnungVersion, ZFVersion
-
-
Constructor Summary
Constructors Constructor Description DXExporterFromA3()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description DXExporterFromA3addAdditionalFile(java.lang.String name, byte[] content)protected voidaddSRGBOutputIntend()Adds an OutputIntent and the sRGB color profile if no OutputIntent existprotected voidaddStructureTreeRoot()Adds a StructureTreeRoot element to the PDF if it doesn't already exist.protected voidaddXMP(org.apache.xmpbox.XMPMetadata metadata)This will add both the RDF-indication which embedded file is Zugferd and the neccessary PDF/A schema extension description to be able to add this information to RDFvoidattachFile(java.lang.String filename, byte[] data, java.lang.String mimetype, java.lang.String relation)voidattachFile(FileAttachment file)voidclose()DXExporterFromA3disableAutoClose(boolean disableAutoClose)booleanensurePDFIsValid(jakarta.activation.DataSource dataSource)voidexport(java.io.OutputStream output)Perform the final export to a now ZUGFeRD-enriched PDF file as OutputStreamvoidexport(java.lang.String ZUGFeRDfilename)Perform the final export to a now ZUGFeRD-enriched PDF fileprotected org.apache.xmpbox.schema.AdobePDFSchemagetAdobePDFSchema(org.apache.xmpbox.XMPMetadata xmp)Returns the AdobePDFSchema from the XMPMetadata if it exists.protected org.apache.xmpbox.schema.DublinCoreSchemagetDublinCoreSchema(org.apache.xmpbox.XMPMetadata xmp)protected org.apache.xmpbox.schema.PDFAIdentificationSchemagetPDFAIdentificationSchema(org.apache.xmpbox.XMPMetadata xmp)IXMLProvidergetProvider()protected org.apache.xmpbox.schema.XMPBasicSchemagetXmpBasicSchema(org.apache.xmpbox.XMPMetadata xmp)protected org.apache.xmpbox.XMPMetadatagetXmpMetadata()Reads the XMPMetadata from the PDDocument, if it exists.booleanisAutoCloseDisabled()DXExporterFromA3load(byte[] 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)DXExporterFromA3load(java.io.InputStream pdfSource)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)DXExporterFromA3load(java.lang.String pdfFilename)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)voidPDFAttachGenericFile(java.lang.String filename, java.lang.String relationship, java.lang.String description, java.lang.String subType, byte[] data)Embeds an external file (generic - any type allowed) in the PDF.voidPDFAttachGenericFile(org.apache.pdfbox.pdmodel.PDDocument doc, java.lang.String filename, java.lang.String relationship, java.lang.String description, java.lang.String subType, byte[] data)Embeds an external file (generic - any type allowed) in the PDF.IExporterprepare()protected byte[]serializeXmpMetadata(org.apache.xmpbox.XMPMetadata xmpMetadata)protected DXExporterFromA3setAttachZUGFeRDHeaders(boolean attachHeaders)DXExporterFromA3setConformanceLevel(PDFAConformanceLevel newLevel)All files are PDF/A-3, setConformance refers to the level conformance.DXExporterFromA3setCreator(java.lang.String creator)DXExporterFromA3setCreatorTool(java.lang.String creatorTool)DXExporterFromA3setDocumentType(java.lang.String DocumentType)Sets the property for DocumentType.protected voidsetMarked()Adds a MarkInfo element to the PDF if it doesn't already exist and sets it as marked.DXExporterFromA3setProducer(java.lang.String producer)DXExporterFromA3setProfile(java.lang.String profilename)DXExporterFromA3setProfile(Profile p)IExportersetTransaction(IExportableTransaction trans)Embeds the Zugferd XML structure in a file named ZUGFeRD-invoice.xml.DXExporterFromA3setXML(byte[] zugferdData)Sets the ZUGFeRD XML data to be attached as a single byte array.protected voidsetXMLProvider(IXMLProvider p)DXExporterFromA3setZUGFeRDVersion(int version)protected voidwriteAdobePDFSchema(org.apache.xmpbox.XMPMetadata xmp)Sets the producer if the overwrite flag is set or the producer is not already set.protected voidwriteDocumentInformation()protected voidwriteDublinCoreSchema(org.apache.xmpbox.XMPMetadata xmp)protected voidwritePDFAIdentificationSchema(org.apache.xmpbox.XMPMetadata xmp)protected voidwriteXMLBasicSchema(org.apache.xmpbox.XMPMetadata xmp)-
Methods inherited from class org.mustangproject.ZUGFeRD.ZUGFeRDExporterFromA3
disableFacturX, getFilenameForVersion, getNamespaceForVersion, getPrefixForVersion, ignorePDFAErrors, prepareDocument, setFacturX, setXRechnungSpecificVersion, setZUGFeRDVersion
-
-
-
-
Field Detail
-
conformanceLevel
protected PDFAConformanceLevel conformanceLevel
-
fileAttachments
protected java.util.ArrayList<FileAttachment> fileAttachments
-
overwrite
protected boolean overwrite
This flag controls whether or not the metadata is overwritten, or kind of merged. The merging probably needs to be overhauled, but for my purpose it was good enough.
-
metadata
protected org.apache.pdfbox.pdmodel.common.PDMetadata metadata
Data (XML invoice) to be added to the ZUGFeRD PDF. It may be externally set, in which case passing a IZUGFeRDExportableTransaction is not necessary. By default it is null meaning the caller needs to pass a IZUGFeRDExportableTransaction for the XML to be populated.
-
producer
protected java.lang.String producer
Producer attribute for PDF
-
creator
protected java.lang.String creator
Author/Creator attribute for PDF
-
creatorTool
protected java.lang.String creatorTool
CreatorTool
-
author
@Deprecated protected java.lang.String author
Deprecated.author is never set yet
-
title
@Deprecated protected java.lang.String title
Deprecated.title is never set yet
-
subject
@Deprecated protected java.lang.String subject
Deprecated.subject is never set yet
-
despatchAdviceDocumentType
protected java.lang.String despatchAdviceDocumentType
OrderX document type. As of version 1.0 it may be ORDER, ORDER_RESPONSE, or ORDER_CHANGE
-
-
Method Detail
-
load
public DXExporterFromA3 load(java.lang.String pdfFilename) throws java.io.IOException
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)- Specified by:
loadin interfaceIZUGFeRDExporter- Overrides:
loadin classZUGFeRDExporterFromA3- Parameters:
pdfFilename- filename of an PDF/A1 compliant document- Returns:
- the generated exporter
- Throws:
java.io.IOException- if anything is wrong with filename
-
getProvider
public IXMLProvider getProvider()
- Specified by:
getProviderin interfaceIZUGFeRDExporter- Overrides:
getProviderin classZUGFeRDExporterFromA3
-
setProfile
public DXExporterFromA3 setProfile(Profile p)
- Specified by:
setProfilein interfaceIZUGFeRDExporter- Overrides:
setProfilein classZUGFeRDExporterFromA3
-
setProfile
public DXExporterFromA3 setProfile(java.lang.String profilename)
- Overrides:
setProfilein classZUGFeRDExporterFromA3
-
addAdditionalFile
public DXExporterFromA3 addAdditionalFile(java.lang.String name, byte[] content)
- Overrides:
addAdditionalFilein classZUGFeRDExporterFromA3
-
load
public DXExporterFromA3 load(byte[] pdfBinary) throws java.io.IOException
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)- Specified by:
loadin interfaceIZUGFeRDExporter- Overrides:
loadin classZUGFeRDExporterFromA3- Parameters:
pdfBinary- binary of a PDF/A1 compliant document- Returns:
- the generated exporter
- Throws:
java.io.IOException- (should not happen at all)
-
attachFile
public void attachFile(FileAttachment file)
- Specified by:
attachFilein interfaceIZUGFeRDExporter- Overrides:
attachFilein classZUGFeRDExporterFromA3
-
attachFile
public void attachFile(java.lang.String filename, byte[] data, java.lang.String mimetype, java.lang.String relation)- Specified by:
attachFilein interfaceIZUGFeRDExporter- Overrides:
attachFilein classZUGFeRDExporterFromA3
-
export
public void export(java.lang.String ZUGFeRDfilename) throws java.io.IOExceptionPerform the final export to a now ZUGFeRD-enriched PDF file- Specified by:
exportin interfaceIExporter- Overrides:
exportin classZUGFeRDExporterFromA3- Parameters:
ZUGFeRDfilename- the pdf file name- Throws:
java.io.IOException- if anything is wrong in the target location
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Overrides:
closein classZUGFeRDExporterFromA3- Throws:
java.io.IOException
-
export
public void export(java.io.OutputStream output) throws java.io.IOExceptionPerform the final export to a now ZUGFeRD-enriched PDF file as OutputStream- Specified by:
exportin interfaceIExporter- Overrides:
exportin classZUGFeRDExporterFromA3- Parameters:
output- the OutputStream- Throws:
java.io.IOException- if anything is wrong in the OutputStream
-
PDFAttachGenericFile
public void PDFAttachGenericFile(java.lang.String filename, java.lang.String relationship, java.lang.String description, java.lang.String subType, byte[] data) throws java.io.IOExceptionEmbeds an external file (generic - any type allowed) in the PDF. The embedding is done in the default PDF document.- Overrides:
PDFAttachGenericFilein classZUGFeRDExporterFromA3- Parameters:
filename- name of the file that will become attachment name in the PDFrelationship- how the file relates to the content, e.g. "Alternative"description- Human-readable description of the file contentsubType- type of the data e.g. could be "text/xml" - mime likedata- the binary data of the file/attachment- Throws:
java.io.IOException- if anything is wrong with filename
-
PDFAttachGenericFile
public void PDFAttachGenericFile(org.apache.pdfbox.pdmodel.PDDocument doc, java.lang.String filename, java.lang.String relationship, java.lang.String description, java.lang.String subType, byte[] data) throws java.io.IOExceptionEmbeds an external file (generic - any type allowed) in the PDF.- Overrides:
PDFAttachGenericFilein classZUGFeRDExporterFromA3- Parameters:
doc- PDDocument to attach the file to.filename- name of the file that will become attachment name in the PDFrelationship- how the file relates to the content, e.g. "Alternative"description- Human-readable description of the file contentsubType- type of the data e.g. could be "text/xml" - mime likedata- the binary data of the file/attachment- Throws:
java.io.IOException- if anything is wrong with filename
-
setXML
public DXExporterFromA3 setXML(byte[] zugferdData) throws java.io.IOException
Sets the ZUGFeRD XML data to be attached as a single byte array. This is useful for use-cases where the XML has already been produced by some external API or component.- Specified by:
setXMLin interfaceIZUGFeRDExporter- Overrides:
setXMLin classZUGFeRDExporterFromA3- Parameters:
zugferdData- XML data to be set as a byte array (XML file in raw form).- Throws:
java.io.IOException- (should not happen)
-
load
public DXExporterFromA3 load(java.io.InputStream pdfSource) throws java.io.IOException
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)- Specified by:
loadin interfaceIZUGFeRDExporter- Overrides:
loadin classZUGFeRDExporterFromA3- Parameters:
pdfSource- source to read a PDF/A1 compliant document from- Returns:
- the generated ZUGFeRDExporter
- Throws:
java.io.IOException- if anything is wrong with inputstream
-
ensurePDFIsValid
public boolean ensurePDFIsValid(jakarta.activation.DataSource dataSource) throws java.io.IOException- Specified by:
ensurePDFIsValidin interfaceIZUGFeRDExporter- Overrides:
ensurePDFIsValidin classZUGFeRDExporterFromA3- Throws:
java.io.IOException
-
setConformanceLevel
public DXExporterFromA3 setConformanceLevel(PDFAConformanceLevel newLevel)
All files are PDF/A-3, setConformance refers to the level conformance.PDF/A-3 has three coformance levels, called "A", "U" and "B".
PDF/A-3-B where B means only visually preservable, U -standard for Mustang- means visually and unicode preservable and A means full compliance, i.e. visually, unicode and structurally preservable and tagged PDF, i.e. useful metainformation for blind people.
Feel free to pass "A" as new level if you know what you are doing :-)
- Specified by:
setConformanceLevelin interfaceIZUGFeRDExporter- Overrides:
setConformanceLevelin classZUGFeRDExporterFromA3
-
setCreator
public DXExporterFromA3 setCreator(java.lang.String creator)
- Specified by:
setCreatorin interfaceIZUGFeRDExporter- Overrides:
setCreatorin classZUGFeRDExporterFromA3
-
setCreatorTool
public DXExporterFromA3 setCreatorTool(java.lang.String creatorTool)
- Overrides:
setCreatorToolin classZUGFeRDExporterFromA3
-
setProducer
public DXExporterFromA3 setProducer(java.lang.String producer)
- Specified by:
setProducerin interfaceIZUGFeRDExporter- Overrides:
setProducerin classZUGFeRDExporterFromA3
-
setDocumentType
public DXExporterFromA3 setDocumentType(java.lang.String DocumentType)
Sets the property for DocumentType.- Parameters:
DocumentType- String, usually DESPATCHADVICE- Returns:
- this exporter
-
setAttachZUGFeRDHeaders
protected DXExporterFromA3 setAttachZUGFeRDHeaders(boolean attachHeaders)
- Overrides:
setAttachZUGFeRDHeadersin classZUGFeRDExporterFromA3
-
addXMP
protected void addXMP(org.apache.xmpbox.XMPMetadata metadata)
This will add both the RDF-indication which embedded file is Zugferd and the neccessary PDF/A schema extension description to be able to add this information to RDF- Overrides:
addXMPin classZUGFeRDExporterFromA3- Parameters:
metadata- the PDFbox XMPMetadata object
-
setTransaction
public IExporter setTransaction(IExportableTransaction trans) throws java.io.IOException
Embeds the Zugferd XML structure in a file named ZUGFeRD-invoice.xml.- Specified by:
setTransactionin interfaceIExporter- Overrides:
setTransactionin classZUGFeRDExporterFromA3- Parameters:
trans- a IZUGFeRDExportableTransaction that provides the data-model to populate the XML. This parameter may be null, if so the XML data should hav ebeen set viasetZUGFeRDXMLData(byte[] zugferdData)- Throws:
java.io.IOException- if anything is wrong with already loaded PDF
-
prepare
public IExporter prepare() throws java.io.IOException
- Overrides:
preparein classZUGFeRDExporterFromA3- Throws:
java.io.IOException
-
getXmpMetadata
protected org.apache.xmpbox.XMPMetadata getXmpMetadata() throws java.io.IOExceptionReads the XMPMetadata from the PDDocument, if it exists. Otherwise creates XMPMetadata.- Overrides:
getXmpMetadatain classZUGFeRDExporterFromA3- Returns:
- the finished XMPMetadata object
- Throws:
java.io.IOException- when e.g. XmpParsingException
-
serializeXmpMetadata
protected byte[] serializeXmpMetadata(org.apache.xmpbox.XMPMetadata xmpMetadata) throws javax.xml.transform.TransformerException- Overrides:
serializeXmpMetadatain classZUGFeRDExporterFromA3- Throws:
javax.xml.transform.TransformerException
-
writeAdobePDFSchema
protected void writeAdobePDFSchema(org.apache.xmpbox.XMPMetadata xmp)
Sets the producer if the overwrite flag is set or the producer is not already set. Sets the PDFVersion to 1.4 if the field is empty.- Overrides:
writeAdobePDFSchemain classZUGFeRDExporterFromA3- Parameters:
xmp- the metadata as XML
-
getAdobePDFSchema
protected org.apache.xmpbox.schema.AdobePDFSchema getAdobePDFSchema(org.apache.xmpbox.XMPMetadata xmp)
Returns the AdobePDFSchema from the XMPMetadata if it exists. If the overwrite flag is set or no AdobePDFSchema exists in the XMPMetadata, it is created, added and returned.- Overrides:
getAdobePDFSchemain classZUGFeRDExporterFromA3- Parameters:
xmp- the metadata to attach to- Returns:
- the pdf schema
-
writePDFAIdentificationSchema
protected void writePDFAIdentificationSchema(org.apache.xmpbox.XMPMetadata xmp)
- Overrides:
writePDFAIdentificationSchemain classZUGFeRDExporterFromA3
-
getPDFAIdentificationSchema
protected org.apache.xmpbox.schema.PDFAIdentificationSchema getPDFAIdentificationSchema(org.apache.xmpbox.XMPMetadata xmp)
- Overrides:
getPDFAIdentificationSchemain classZUGFeRDExporterFromA3
-
writeDublinCoreSchema
protected void writeDublinCoreSchema(org.apache.xmpbox.XMPMetadata xmp)
- Overrides:
writeDublinCoreSchemain classZUGFeRDExporterFromA3
-
getDublinCoreSchema
protected org.apache.xmpbox.schema.DublinCoreSchema getDublinCoreSchema(org.apache.xmpbox.XMPMetadata xmp)
- Overrides:
getDublinCoreSchemain classZUGFeRDExporterFromA3
-
writeXMLBasicSchema
protected void writeXMLBasicSchema(org.apache.xmpbox.XMPMetadata xmp)
- Overrides:
writeXMLBasicSchemain classZUGFeRDExporterFromA3
-
getXmpBasicSchema
protected org.apache.xmpbox.schema.XMPBasicSchema getXmpBasicSchema(org.apache.xmpbox.XMPMetadata xmp)
- Overrides:
getXmpBasicSchemain classZUGFeRDExporterFromA3
-
writeDocumentInformation
protected void writeDocumentInformation()
- Overrides:
writeDocumentInformationin classZUGFeRDExporterFromA3
-
addSRGBOutputIntend
protected void addSRGBOutputIntend() throws java.io.IOExceptionAdds an OutputIntent and the sRGB color profile if no OutputIntent exist- Overrides:
addSRGBOutputIntendin classZUGFeRDExporterFromA3- Throws:
java.io.IOException- if the ICC file cannot be read or attached to doc
-
setMarked
protected void setMarked()
Adds a MarkInfo element to the PDF if it doesn't already exist and sets it as marked.- Overrides:
setMarkedin classZUGFeRDExporterFromA3
-
addStructureTreeRoot
protected void addStructureTreeRoot()
Adds a StructureTreeRoot element to the PDF if it doesn't already exist.- Overrides:
addStructureTreeRootin classZUGFeRDExporterFromA3
-
isAutoCloseDisabled
public boolean isAutoCloseDisabled()
- Overrides:
isAutoCloseDisabledin classZUGFeRDExporterFromA3- Returns:
- if pdf file will be automatically closed after adding ZF
-
disableAutoClose
public DXExporterFromA3 disableAutoClose(boolean disableAutoClose)
- Specified by:
disableAutoClosein interfaceIZUGFeRDExporter- Overrides:
disableAutoClosein classZUGFeRDExporterFromA3- Parameters:
disableAutoClose- prevent PDF file from being closed after adding ZF
-
setXMLProvider
protected void setXMLProvider(IXMLProvider p)
- Overrides:
setXMLProviderin classZUGFeRDExporterFromA3
-
setZUGFeRDVersion
public DXExporterFromA3 setZUGFeRDVersion(int version)
- Specified by:
setZUGFeRDVersionin interfaceIZUGFeRDExporter- Overrides:
setZUGFeRDVersionin classZUGFeRDExporterFromA3
-
-