diff --git a/fop-core/src/main/java/org/apache/fop/cli/CommandLineOptions.java b/fop-core/src/main/java/org/apache/fop/cli/CommandLineOptions.java index 8d824b96055..8793eace636 100644 --- a/fop-core/src/main/java/org/apache/fop/cli/CommandLineOptions.java +++ b/fop-core/src/main/java/org/apache/fop/cli/CommandLineOptions.java @@ -25,6 +25,7 @@ import java.io.IOException; import java.io.PrintStream; import java.net.URI; +import java.util.Date; import java.util.Locale; import java.util.Map; import java.util.Vector; @@ -234,6 +235,12 @@ public boolean parse(String[] args) //Make sure the prepared serializer is used foUserAgent.setDocumentHandlerOverride(serializer); } + + String sourceDateEpoch = System.getenv("SOURCE_DATE_EPOCH"); + if (sourceDateEpoch != null) { + foUserAgent.setCreationDate(new Date(1000 * Long.parseLong(sourceDateEpoch))); + } + return true; } diff --git a/fop-core/src/main/java/org/apache/fop/pdf/FileIDGenerator.java b/fop-core/src/main/java/org/apache/fop/pdf/FileIDGenerator.java index 00aad442657..d8053e59c04 100644 --- a/fop-core/src/main/java/org/apache/fop/pdf/FileIDGenerator.java +++ b/fop-core/src/main/java/org/apache/fop/pdf/FileIDGenerator.java @@ -86,7 +86,11 @@ byte[] getUpdatedFileID() { private void generateFileID() { DateFormat df = new SimpleDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS"); - digest.update(PDFDocument.encode(df.format(new Date()))); + Date date = this.document.getInfo().getCreationDate(); + if (date == null) { + date = new Date(); + } + digest.update(PDFDocument.encode(df.format(date))); // Ignoring the filename here for simplicity even though it's recommended // by the PDF spec digest.update(PDFDocument.encode(String.valueOf(document.getCurrentFileSize()))); diff --git a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java index 5d565cb4797..aa0a4cdb091 100644 --- a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java +++ b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java @@ -262,7 +262,11 @@ public void renderXMPMetadata(XMPMetadata metadata) { fopXMP.mergeInto(docXMP, exclude); XMPBasicAdapter xmpBasic = XMPBasicSchema.getAdapter(docXMP); //Metadata was changed so update metadata date - xmpBasic.setMetadataDate(new java.util.Date()); + Date date = userAgent.getCreationDate(); + if (date == null) { + date = new Date(); + } + xmpBasic.setMetadataDate(date); PDFMetadata.updateInfoFromMetadata(docXMP, pdfDoc.getInfo()); PDFMetadata pdfMetadata = pdfDoc.getFactory().makeMetadata(