Author: jeremias
Date: Thu Feb 7 06:02:44 2008
New Revision: 619417
URL: http://svn.apache.org/viewvc?rev=619417&view=rev
Log:
Added an option to disable the default sRGB profile in PDF output for those who
don't care about color fidelity, but care about PDF file size. Note that this
option is not possible if PDF/A, PDF/X or an output profile is used. Makes
simple PDFs about 4KB smaller. Ha!
Added:
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/pdf/PDFsRGBSettingsTestCase.java
(with props)
Modified:
xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/configuration.xml
xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/output.xml
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
xmlgraphics/fop/trunk/status.xml
xmlgraphics/fop/trunk/test/java/org/apache/fop/StandardTestSuite.java
Modified:
xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/configuration.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/configuration.xml?rev=619417&r1=619416&r2=619417&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/configuration.xml
(original)
+++
xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/configuration.xml
Thu Feb 7 06:02:44 2008
@@ -277,7 +277,23 @@
<output-profile>C:\FOP\Color\EuropeISOCoatedFOGRA27.icc</output-profile>
<fonts....
- </renderer>]]></source>
+ </renderer>]]></source>
+ <p>
+ Some people don't have high requirements on color fidelity but instead
want the smallest
+ PDF file sizes possible. In this case it's possible to disable the
default sRGB color space
+ which XSL-FO requires. This will cause RGB colors to be generated as
device-specific RGB.
+ Please note that this option is unavailable (and will cause an error)
if you enable
+ PDF/A or PDF/X functionality or if you specify an output profile. This
setting will make the
+ PDF about 4KB smaller. To disable the sRGB color space add the
following setting:
+ </p>
+ <source><![CDATA[
+ <renderer mime="application/pdf">
+ <filterList...
+
+ <disable-srgb-colorspace>true</disable-srgb-colorspace>
+
+ <fonts....
+ </renderer>]]></source>
</section>
<section id="ps-renderer">
<title>Special Settings for the PostScript Renderer</title>
Modified: xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/output.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/output.xml?rev=619417&r1=619416&r2=619417&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/output.xml
(original)
+++ xmlgraphics/fop/trunk/src/documentation/content/xdocs/trunk/output.xml Thu
Feb 7 06:02:44 2008
@@ -105,7 +105,7 @@
<section id="pdf-postprocess">
<title>Post-processing</title>
<p>
- FOP does not currently support several desirable PDF features: XMP
metadata and watermarks.
+ FOP does not currently support several desirable PDF features:
watermarks and signatures.
One workaround is to use Adobe Acrobat (the full version, not the
Reader) to process
the file manually or with scripting that it supports.
</p>
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java?rev=619417&r1=619416&r2=619417&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderer.java
Thu Feb 7 06:02:44 2008
@@ -147,6 +147,11 @@
public static final String PDF_X_MODE = "pdf-x-mode";
/** Rendering Options key for the ICC profile for the output intent. */
public static final String KEY_OUTPUT_PROFILE = "output-profile";
+ /**
+ * Rendering Options key for disabling the sRGB color space (only possible
if no PDF/A or
+ * PDF/X profile is active).
+ */
+ public static final String KEY_DISABLE_SRGB_COLORSPACE =
"disable-srgb-colorspace";
/** Controls whether comments are written to the PDF stream. */
protected static final boolean WRITE_COMMENTS = true;
@@ -233,10 +238,10 @@
/** the ICC stream used as output profile by this document for PDF/A and
PDF/X functionality. */
protected PDFICCStream outputProfile;
- /** the ICC stream for the sRGB color space. */
- //protected PDFICCStream sRGBProfile;
/** the default sRGB color space. */
protected PDFICCBasedColorSpace sRGBColorSpace;
+ /** controls whether the sRGB color space should be installed */
+ protected boolean disableSRGBColorSpace = false;
/** Optional URI to an output profile to be used. */
protected String outputProfileURI;
@@ -344,6 +349,10 @@
if (s != null) {
this.outputProfileURI = s;
}
+ setting = agent.getRendererOptions().get(KEY_DISABLE_SRGB_COLORSPACE);
+ if (setting != null) {
+ this.disableSRGBColorSpace = booleanValueOf(setting);
+ }
}
/**
@@ -387,11 +396,21 @@
}
private void addsRGBColorSpace() throws IOException {
- if (this.sRGBColorSpace != null) {
- return;
+ if (disableSRGBColorSpace) {
+ if (this.pdfAMode != PDFAMode.DISABLED
+ || this.pdfXMode != PDFXMode.DISABLED
+ || this.outputProfileURI != null) {
+ throw new IllegalStateException("It is not possible to disable
the sRGB color"
+ + " space if PDF/A or PDF/X functionality is enabled
or an"
+ + " output profile is set!");
+ }
+ } else {
+ if (this.sRGBColorSpace != null) {
+ return;
+ }
+ //Map sRGB as default RGB profile for DeviceRGB
+ this.sRGBColorSpace =
PDFICCBasedColorSpace.setupsRGBAsDefaultRGBColorSpace(pdfDoc);
}
- //Map sRGB as default RGB profile for DeviceRGB
- this.sRGBColorSpace =
PDFICCBasedColorSpace.setupsRGBAsDefaultRGBColorSpace(pdfDoc);
}
private void addDefaultOutputProfile() throws IOException {
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java?rev=619417&r1=619416&r2=619417&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
(original)
+++
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
Thu Feb 7 06:02:44 2008
@@ -24,6 +24,7 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
+
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.pdf.PDFAMode;
@@ -80,6 +81,10 @@
s = cfg.getChild(PDFRenderer.KEY_OUTPUT_PROFILE,
true).getValue(null);
if (s != null) {
pdfRenderer.setOutputProfileURI(s);
+ }
+ Configuration child =
cfg.getChild(PDFRenderer.KEY_DISABLE_SRGB_COLORSPACE, false);
+ if (child != null) {
+ pdfRenderer.disableSRGBColorSpace =
child.getValueAsBoolean(false);
}
}
}
Modified: xmlgraphics/fop/trunk/status.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=619417&r1=619416&r2=619417&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/status.xml (original)
+++ xmlgraphics/fop/trunk/status.xml Thu Feb 7 06:02:44 2008
@@ -28,6 +28,10 @@
<changes>
<release version="FOP Trunk">
+ <action context="Fonts" dev="JM" type="add">
+ Added an option to disable the default sRGB profile in PDF output for
those who
+ don't care about color fidelity, but care about PDF file size.
+ </action>
<action context="Code" dev="AD" type="fix" fixes-bug="43705">
Fixed a bug when the rgb-icc() function was used either before the
fo:declarations,
or in documents without a fo:declarations node. In such cases, the
sRGB fallback
Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/StandardTestSuite.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/StandardTestSuite.java?rev=619417&r1=619416&r2=619417&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/StandardTestSuite.java
(original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/StandardTestSuite.java Thu
Feb 7 06:02:44 2008
@@ -19,14 +19,15 @@
package org.apache.fop;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
import org.apache.fop.render.pdf.PDFAConformanceTestCase;
import org.apache.fop.render.pdf.PDFCMapTestCase;
import org.apache.fop.render.pdf.PDFEncodingTestCase;
+import org.apache.fop.render.pdf.PDFsRGBSettingsTestCase;
import org.apache.fop.render.rtf.RichTextFormatTestSuite;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
/**
* Test suite for basic functionality of FOP.
*/
@@ -45,6 +46,7 @@
suite.addTest(new TestSuite(PDFAConformanceTestCase.class));
suite.addTest(new TestSuite(PDFEncodingTestCase.class));
suite.addTest(new TestSuite(PDFCMapTestCase.class));
+ suite.addTest(new TestSuite(PDFsRGBSettingsTestCase.class));
suite.addTest(RichTextFormatTestSuite.suite());
//$JUnit-END$
return suite;
Added:
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/pdf/PDFsRGBSettingsTestCase.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/render/pdf/PDFsRGBSettingsTestCase.java?rev=619417&view=auto
==============================================================================
---
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/pdf/PDFsRGBSettingsTestCase.java
(added)
+++
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/pdf/PDFsRGBSettingsTestCase.java
Thu Feb 7 06:02:44 2008
@@ -0,0 +1,64 @@
+/*
+ * 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.io.File;
+
+import org.apache.fop.apps.FOUserAgent;
+
+/**
+ * Tests the disables-srgb-colorspace setting.
+ */
+public class PDFsRGBSettingsTestCase extends BasePDFTestCase {
+
+ private File foBaseDir = new File("test/xml/pdf-a");
+
+ /**
+ * Main constructor
+ * @param name name of the test case
+ */
+ public PDFsRGBSettingsTestCase(String name) {
+ super(name);
+ }
+
+ private FOUserAgent getUserAgent(boolean enablePDFA) {
+ final FOUserAgent a = fopFactory.newFOUserAgent();
+ if (enablePDFA) {
+ a.getRendererOptions().put("pdf-a-mode", "PDF/A-1b");
+ }
+ a.getRendererOptions().put("disable-srgb-colorspace", Boolean.TRUE);
+ return a;
+ }
+
+ /**
+ * Verify that the PDFRenderer complains if PDF/A or PDF/X is used when
sRGB is disabled.
+ * @throws Exception if the test fails
+ */
+ public void testPDFAWithDisabledSRGB() throws Exception {
+ File foFile = new File(foBaseDir, "minimal-pdf-a.fo");
+ try {
+ convertFO(foFile, getUserAgent(true), false);
+ fail("PDFRenderer must fail if PDF/A is active!");
+ } catch (IllegalStateException e) {
+ //exception expected!
+ }
+ }
+
+}
Propchange:
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/pdf/PDFsRGBSettingsTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/pdf/PDFsRGBSettingsTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]