From 5fabd3e0889ce859dd269ab32b02197a2590b64c Mon Sep 17 00:00:00 2001 From: Jeremias Maerki Date: Fri, 22 Jun 2007 13:34:37 +0000 Subject: [PATCH] Updated PDF/A-1b support according to ISO-19005-1:2005/Cor.1:2007. Changed test.xconf to match the triplet generated by auto-font-detection (Gladiator is bold) and adjusted PDF/A test files accordingly. Updated XML Graphics Commons to latest snapshot to include the PDF/A fixes. Added a unit test for the synchronization of PDF Info and XMP metadata as described in PDF/A-1. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@549816 13f79535-47bb-0310-9956-ffa450edef68 --- lib/xmlgraphics-commons-1.2svn.jar | Bin 343511 -> 343559 bytes src/java/org/apache/fop/pdf/PDFMetadata.java | 30 ++--- status.xml | 3 + .../fop/render/pdf/PDFAMetadataTestCase.java | 112 ++++++++++++++++++ test/test.xconf | 3 + test/xml/pdf-a/minimal-pdf-a.fo | 2 +- test/xml/pdf-a/with-cmyk-images.fo | 2 +- 7 files changed, 131 insertions(+), 21 deletions(-) create mode 100644 test/java/org/apache/fop/render/pdf/PDFAMetadataTestCase.java diff --git a/lib/xmlgraphics-commons-1.2svn.jar b/lib/xmlgraphics-commons-1.2svn.jar index becb45ad5472aa95c2030daeaff360c39f7ab42a..4ec816a04645b7c5a1ff82079e0498cbc15719d8 100644 GIT binary patch delta 22219 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:|r0yf$ORKemU~mtoWGSY62btPqHUI4KKsJ#R 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 diff --git a/src/java/org/apache/fop/pdf/PDFMetadata.java b/src/java/org/apache/fop/pdf/PDFMetadata.java index 571b77499..addd7f2b1 100644 --- a/src/java/org/apache/fop/pdf/PDFMetadata.java +++ b/src/java/org/apache/fop/pdf/PDFMetadata.java @@ -34,7 +34,6 @@ import org.apache.xmlgraphics.xmp.schemas.XMPBasicSchema; import org.apache.xmlgraphics.xmp.schemas.pdf.AdobePDFAdapter; import org.apache.xmlgraphics.xmp.schemas.pdf.AdobePDFSchema; import org.apache.xmlgraphics.xmp.schemas.pdf.PDFAAdapter; -import org.apache.xmlgraphics.xmp.schemas.pdf.PDFAOldXMPSchema; import org.apache.xmlgraphics.xmp.schemas.pdf.PDFAXMPSchema; import org.xml.sax.SAXException; @@ -136,7 +135,7 @@ public class PDFMetadata extends PDFStream { info.setCreationDate(d); } - //Important: Acrobat's preflight check for PDF/A-1b wants the creation date in the Info + //Important: Acrobat 7's preflight check for PDF/A-1b wants the creation date in the Info //object and in the XMP metadata to have the same timezone or else it shows a validation //error even if the times are essentially equal. @@ -149,7 +148,8 @@ public class PDFMetadata extends PDFStream { dc.setTitle(info.getTitle()); } if (info.getSubject() != null) { - dc.addSubject(info.getSubject()); + //Subject maps to dc:description["x-default"] as per ISO-19005-1:2005/Cor.1:2007 + dc.setDescription(null, info.getSubject()); } dc.addDate(info.getCreationDate()); @@ -157,25 +157,22 @@ public class PDFMetadata extends PDFStream { PDFAMode pdfaMode = pdfDoc.getProfile().getPDFAMode(); if (pdfaMode.isPDFA1LevelB()) { PDFAAdapter pdfa = PDFAXMPSchema.getAdapter(meta); - //Create the identification a second time with the old namespace to keep - //Adobe Acrobat happy - PDFAAdapter pdfaOld = PDFAOldXMPSchema.getAdapter(meta); pdfa.setPart(1); - pdfaOld.setPart(1); if (pdfaMode == PDFAMode.PDFA_1A) { pdfa.setConformance("A"); //PDF/A-1a - pdfaOld.setConformance("A"); //PDF/A-1a } else { pdfa.setConformance("B"); //PDF/A-1b - pdfaOld.setConformance("B"); //PDF/A-1b } } //XMP Basic Schema XMPBasicAdapter xmpBasic = XMPBasicSchema.getAdapter(meta); xmpBasic.setCreateDate(info.getCreationDate()); - PDFProfile profile = pdfDoc.getProfile(); - if (profile.isModDateRequired()) { + PDFProfile profile = pdfDoc.getProfile(); + if (info.getModDate() != null) { + xmpBasic.setModifyDate(info.getModDate()); + } else if (profile.isModDateRequired()) { + //if modify date is needed but none is in the Info object, use creation date xmpBasic.setModifyDate(info.getCreationDate()); } if (info.getCreator() != null) { @@ -210,14 +207,9 @@ public class PDFMetadata extends PDFStream { } else { info.setAuthor(null); } - String[] subjects = dc.getSubjects(); - //PDF/A-1 defines dc:subject as "Text" but XMP defines it as "bag Text". - //We're simply doing the inverse from createXMPFromUserAgent() above. - if (subjects != null && subjects.length > 0) { - info.setSubject(subjects[0]); - } else { - info.setSubject(null); - } + + //dc:description["x-default"] maps to Subject as per ISO-19005-1:2005/Cor.1:2007 + info.setSubject(dc.getDescription()); AdobePDFAdapter pdf = AdobePDFSchema.getAdapter(meta); info.setKeywords(pdf.getKeywords()); diff --git a/status.xml b/status.xml index 5d939e2e3..ff79d4998 100644 --- a/status.xml +++ b/status.xml @@ -28,6 +28,9 @@ + + Updated PDF/A-1b support according to ISO-19005-1:2005/Cor.1:2007. + Add support for font auto-detection (easier font configuration). diff --git a/test/java/org/apache/fop/render/pdf/PDFAMetadataTestCase.java b/test/java/org/apache/fop/render/pdf/PDFAMetadataTestCase.java new file mode 100644 index 000000000..2821dcb24 --- /dev/null +++ b/test/java/org/apache/fop/render/pdf/PDFAMetadataTestCase.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.fop.render.pdf; + +import java.util.Calendar; +import java.util.TimeZone; + +import org.apache.fop.pdf.PDFDocument; +import org.apache.fop.pdf.PDFInfo; +import org.apache.fop.pdf.PDFMetadata; +import org.apache.xmlgraphics.xmp.Metadata; +import org.apache.xmlgraphics.xmp.schemas.DublinCoreAdapter; +import org.apache.xmlgraphics.xmp.schemas.DublinCoreSchema; +import org.apache.xmlgraphics.xmp.schemas.XMPBasicAdapter; +import org.apache.xmlgraphics.xmp.schemas.XMPBasicSchema; +import org.apache.xmlgraphics.xmp.schemas.pdf.AdobePDFAdapter; +import org.apache.xmlgraphics.xmp.schemas.pdf.AdobePDFSchema; + +import junit.framework.TestCase; + +/** + * Test case for PDF/A metadata handling. + */ +public class PDFAMetadataTestCase extends TestCase { + + public void testInfoUpdate() throws Exception { + Metadata meta = new Metadata(); + DublinCoreAdapter dc = DublinCoreSchema.getAdapter(meta); + dc.setTitle("MyTitle"); + dc.setDescription(null, "MySubject"); + dc.addCreator("That's me"); + + AdobePDFAdapter pdf = AdobePDFSchema.getAdapter(meta); + pdf.setKeywords("XSL-FO XML"); + pdf.setProducer("SuperFOP"); + + XMPBasicAdapter xmp = XMPBasicSchema.getAdapter(meta); + xmp.setCreatorTool("WonderFOP"); + Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("Europe/Zurich")); + cal1.set(2007, Calendar.JUNE, 5, 21, 49, 13); + cal1.set(Calendar.MILLISECOND, 0); + xmp.setCreateDate(cal1.getTime()); + Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("Europe/Zurich")); + cal2.set(2007, Calendar.JUNE, 6, 8, 15, 59); + cal2.set(Calendar.MILLISECOND, 0); + xmp.setModifyDate(cal2.getTime()); + + PDFInfo info = new PDFInfo(); + assertNull(info.getTitle()); + PDFMetadata.updateInfoFromMetadata(meta, info); + + assertEquals("MyTitle", info.getTitle()); + assertEquals("MySubject", info.getSubject()); + assertEquals("That's me", info.getAuthor()); + assertEquals("XSL-FO XML", info.getKeywords()); + assertEquals("SuperFOP", info.getProducer()); + assertEquals("WonderFOP", info.getCreator()); + assertEquals(cal1.getTime(), info.getCreationDate()); + assertEquals(cal2.getTime(), info.getModDate()); + } + + public void testXMPUpdate() throws Exception { + PDFDocument doc = new PDFDocument("SuperFOP"); + PDFInfo info = doc.getInfo(); + info.setTitle("MyTitle"); + info.setSubject("MySubject"); + info.setAuthor("That's me"); + info.setKeywords("XSL-FO XML"); + //info.setProducer("SuperFOP"); + info.setCreator("WonderFOP"); + Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("Europe/Zurich")); + cal1.set(2007, Calendar.JUNE, 5, 21, 49, 13); + cal1.set(Calendar.MILLISECOND, 0); + info.setCreationDate(cal1.getTime()); + Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("Europe/Zurich")); + cal2.set(2007, Calendar.JUNE, 6, 8, 15, 59); + cal2.set(Calendar.MILLISECOND, 0); + info.setModDate(cal2.getTime()); + + Metadata meta = PDFMetadata.createXMPFromUserAgent(doc); + + DublinCoreAdapter dc = DublinCoreSchema.getAdapter(meta); + assertEquals("MyTitle", dc.getTitle()); + assertEquals("MySubject", dc.getDescription()); + assertEquals(1, dc.getCreators().length); + assertEquals("That's me", dc.getCreators()[0]); + AdobePDFAdapter pdf = AdobePDFSchema.getAdapter(meta); + assertEquals("XSL-FO XML", pdf.getKeywords()); + assertEquals("SuperFOP", pdf.getProducer()); + XMPBasicAdapter xmp = XMPBasicSchema.getAdapter(meta); + assertEquals("WonderFOP", xmp.getCreatorTool()); + assertEquals(cal1.getTime(), xmp.getCreateDate()); + assertEquals(cal2.getTime(), xmp.getModifyDate()); + } +} diff --git a/test/test.xconf b/test/test.xconf index 56fdd8bd8..1f022f9fd 100644 --- a/test/test.xconf +++ b/test/test.xconf @@ -9,12 +9,15 @@ + + + diff --git a/test/xml/pdf-a/minimal-pdf-a.fo b/test/xml/pdf-a/minimal-pdf-a.fo index 0081be30b..94adf72e2 100644 --- a/test/xml/pdf-a/minimal-pdf-a.fo +++ b/test/xml/pdf-a/minimal-pdf-a.fo @@ -1,5 +1,5 @@ - + diff --git a/test/xml/pdf-a/with-cmyk-images.fo b/test/xml/pdf-a/with-cmyk-images.fo index f3429d304..109829046 100644 --- a/test/xml/pdf-a/with-cmyk-images.fo +++ b/test/xml/pdf-a/with-cmyk-images.fo @@ -1,5 +1,5 @@ - + -- 2.39.5