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..3b9cb131864 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,9 @@ 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()))); + String sde = System.getenv("SOURCE_DATE_EPOCH"); + Date d = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde)); + digest.update(PDFDocument.encode(df.format(d))); // 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/pdf/PDFMetadata.java b/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java index ce8cfdf2d8c..6eb38975abf 100644 --- a/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java +++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java @@ -135,7 +135,9 @@ public static Metadata createXMPFromPDFDocument(PDFDocument pdfDoc) { //Set creation date if not available, yet if (info.getCreationDate() == null) { - Date d = new Date(); + Date d = System.getenv("SOURCE_DATE_EPOCH") == null ? + new Date() : + new Date(1000 * Long.parseLong(System.getenv("SOURCE_DATE_EPOCH"))); info.setCreationDate(d); } diff --git a/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java b/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java index 090d368d7c7..871c4eea8ff 100644 --- a/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java +++ b/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java @@ -545,7 +545,10 @@ private Metadata createDefaultDocumentMetadata() { } else { xmpBasic.setCreatorTool(Version.getVersion()); } - xmpBasic.setMetadataDate(new java.util.Date()); + java.util.Date d = System.getenv("SOURCE_DATE_EPOCH") == null ? + new java.util.Date() : + new java.util.Date(1000 * Long.parseLong(System.getenv("SOURCE_DATE_EPOCH"))); + xmpBasic.setMetadataDate(d); if (getUserAgent().getCreationDate() != null) { xmpBasic.setCreateDate(getUserAgent().getCreationDate()); } else { 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 e212a7b3a1a..89ba3a978e9 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 @@ -261,7 +261,10 @@ 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()); + java.util.Date d = System.getenv("SOURCE_DATE_EPOCH") == null ? + new java.util.Date() : + new java.util.Date(1000 * Long.parseLong(System.getenv("SOURCE_DATE_EPOCH"))); + xmpBasic.setMetadataDate(d); PDFMetadata.updateInfoFromMetadata(docXMP, pdfDoc.getInfo()); PDFMetadata pdfMetadata = pdfDoc.getFactory().makeMetadata(