Configurable PDF Attachment Compression

This commit is contained in:
pgjacobs
2026-02-26 12:26:21 +01:00
parent 406be10f25
commit 8ce79b3678
6 changed files with 25 additions and 6 deletions

View File

@@ -136,6 +136,7 @@ public class DXExporterFromA1 extends DXExporterFromA3 {
public DXExporterFromA1 setConformanceLevel(PDFAConformanceLevel newLevel) { public DXExporterFromA1 setConformanceLevel(PDFAConformanceLevel newLevel) {
return (DXExporterFromA1) super.setConformanceLevel(newLevel); return (DXExporterFromA1) super.setConformanceLevel(newLevel);
} }
@Override @Override
public DXExporterFromA1 setProducer(String producer){ public DXExporterFromA1 setProducer(String producer){
return (DXExporterFromA1) super.setProducer(producer); return (DXExporterFromA1) super.setProducer(producer);

View File

@@ -71,6 +71,7 @@ import jakarta.activation.FileDataSource;
public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 {
protected PDFAConformanceLevel conformanceLevel = PDFAConformanceLevel.UNICODE; protected PDFAConformanceLevel conformanceLevel = PDFAConformanceLevel.UNICODE;
protected boolean compressionEnabled = false;
protected ArrayList<FileAttachment> fileAttachments = new ArrayList<>(); protected ArrayList<FileAttachment> fileAttachments = new ArrayList<>();
/** /**
@@ -296,8 +297,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 {
dict.setString("Desc", description); dict.setString("Desc", description);
ByteArrayInputStream fakeFile = new ByteArrayInputStream(data); ByteArrayInputStream fakeFile = new ByteArrayInputStream(data);
PDEmbeddedFile ef = new PDEmbeddedFile(doc, fakeFile); COSName filter = compressionEnabled ? COSName.FLATE_DECODE : null;
// ef.addCompression(); PDEmbeddedFile ef = new PDEmbeddedFile(doc, fakeFile, filter);
ef.setSubtype(subType); ef.setSubtype(subType);
ef.setSize(data.length); ef.setSize(data.length);
ef.setCreationDate(new GregorianCalendar()); ef.setCreationDate(new GregorianCalendar());
@@ -417,7 +418,6 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 {
return this; return this;
} }
@Override @Override
public DXExporterFromA3 setCreator(String creator) { public DXExporterFromA3 setCreator(String creator) {
this.creator = creator; this.creator = creator;

View File

@@ -56,6 +56,7 @@ public interface IZUGFeRDExporter extends Closeable, IExporter {
public IZUGFeRDExporter load(InputStream pdfSource) throws IOException; public IZUGFeRDExporter load(InputStream pdfSource) throws IOException;
public IZUGFeRDExporter setCreator(String creator); public IZUGFeRDExporter setCreator(String creator);
public IZUGFeRDExporter setConformanceLevel(PDFAConformanceLevel newLevel); public IZUGFeRDExporter setConformanceLevel(PDFAConformanceLevel newLevel);
public IZUGFeRDExporter setEnablePDFAttachmentCompression(boolean enablePDFAttachmentCompression);
public IZUGFeRDExporter setProducer(String producer); public IZUGFeRDExporter setProducer(String producer);
public IZUGFeRDExporter setZUGFeRDVersion(int version); public IZUGFeRDExporter setZUGFeRDVersion(int version);
public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException; public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException;

View File

@@ -129,6 +129,9 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 {
private boolean attachZUGFeRDHeaders = true; private boolean attachZUGFeRDHeaders = true;
/** Defines whether attachments to the PDF should be using FLATE compression */
private boolean compressionEnabled = false;
/** /**
* Makes A PDF/A3a-compliant document from a PDF-A1 compliant document (on the * 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) * metadata level, this will not e.g. convert graphics to JPG-2000)
@@ -296,8 +299,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 {
dict.setString("Desc", description); dict.setString("Desc", description);
ByteArrayInputStream fakeFile = new ByteArrayInputStream(data); ByteArrayInputStream fakeFile = new ByteArrayInputStream(data);
PDEmbeddedFile ef = new PDEmbeddedFile(doc, fakeFile); COSName filter = compressionEnabled ? COSName.FLATE_DECODE : null;
// ef.addCompression(); PDEmbeddedFile ef = new PDEmbeddedFile(doc, fakeFile, filter);
ef.setSubtype(subType); ef.setSubtype(subType);
ef.setSize(data.length); ef.setSize(data.length);
ef.setCreationDate(new GregorianCalendar()); ef.setCreationDate(new GregorianCalendar());

View File

@@ -101,6 +101,9 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte
private Profile profile = null; private Profile profile = null;
protected boolean documentPrepared = false; protected boolean documentPrepared = false;
/** Defines whether attachments to the PDF should be using FLATE compression */
private boolean compressionEnabled = false;
/** /**
* Data (XML invoice) to be added to the ZUGFeRD PDF. It may be externally set, * 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 * in which case passing a IZUGFeRDExportableTransaction is not necessary. By
@@ -392,7 +395,8 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte
dict.setString("Desc", description); dict.setString("Desc", description);
ByteArrayInputStream fakeFile = new ByteArrayInputStream(data); ByteArrayInputStream fakeFile = new ByteArrayInputStream(data);
PDEmbeddedFile ef = new PDEmbeddedFile(doc, fakeFile, COSName.FLATE_DECODE); COSName filter = compressionEnabled ? COSName.FLATE_DECODE : null;
PDEmbeddedFile ef = new PDEmbeddedFile(doc, fakeFile, filter);
// ef.addCompression(); // ef.addCompression();
ef.setSubtype(subType); ef.setSubtype(subType);
ef.setSize(data.length); ef.setSize(data.length);
@@ -503,6 +507,12 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte
return this; return this;
} }
@Override
public IZUGFeRDExporter setEnablePDFAttachmentCompression(boolean compressionEnabled) {
this.compressionEnabled = compressionEnabled;
return this;
}
public ZUGFeRDExporterFromA3 setCreator(String creator) { public ZUGFeRDExporterFromA3 setCreator(String creator) {
this.creator = creator; this.creator = creator;

View File

@@ -188,6 +188,10 @@ public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter {
return getExporter().setConformanceLevel(newLevel); return getExporter().setConformanceLevel(newLevel);
} }
public IZUGFeRDExporter setEnablePDFAttachmentCompression(boolean compressionEnabled) {
return getExporter().setEnablePDFAttachmentCompression(compressionEnabled);
}
public IZUGFeRDExporter setProducer(String producer) { public IZUGFeRDExporter setProducer(String producer) {
return getExporter().setProducer(producer); return getExporter().setProducer(producer);