问题描述
我被要求使用 XSL-FO 和 Apache FOP 配置生成 A-3 类型的 PDF。 PDF 已生成但无法验证
错误:使用了没有适当输出意图的特定于设备的颜色空间 (DeviceGray)。
我认为这个问题与 FOP 配置有关,这是我使用的:
<fop version="1.0">
<!-- Base URL for resolving relative URLs -->
<base>.</base>
<!-- Source resolution in dpi (dots/pixels per inch) for determining the size of pixels in SVG and bitmap images,default: 72dpi -->
<source-resolution>72</source-resolution>
<!-- Target resolution in dpi (dots/pixels per inch) for specifying the target resolution for generated bitmaps,default: 72dpi -->
<target-resolution>72</target-resolution>
<!-- Default page-height and page-width,in case
value is specified as auto -->
<default-page-settings height="11in" width="8.26in"/>
<!-- information for specific renderers -->
<!-- Uses renderer mime type for renderers -->
<renderers>
<renderer mime="application/pdf">
<version>1.4</version>
<filterList>
<!-- provides compression using zlib flate (default is on) -->
<value>flate</value>
</filterList>
<fonts>
<font embed-url="ZapfDingbats.ttf" kerning="yes" sub-font="ZapfDingbats">
<font-triplet name="ZapfDingbats" style="normal" weight="normal"/>
<font-triplet name="ZapfDingbats" style="normal" weight="bold"/>
</font>
<font embed-url="symbol.ttf" kerning="yes" sub-font="Symbol">
<font-triplet name="Symbol" style="normal" weight="normal"/>
<font-triplet name="Symbol" style="normal" weight="bold"/>
</font>
<font metrics-url="ariali.xml" kerning="yes" embed-url="ariali.ttf" embedding-mode="full">
<font-triplet name="Arial" style="italic" weight="normal"/>
</font>
<font metrics-url="arial.xml" kerning="yes" embed-url="arial.ttf" embedding-mode="full">
<font-triplet name="Arial" style="normal" weight="normal"/>
</font>
<font metrics-url="arialbd.xml" kerning="yes" embed-url="arialbd.ttf" embedding-mode="full">
<font-triplet name="Arial" style="normal" weight="bold"/>
</font>
</fonts>
</renderer>
<renderer mime="application/postscript">
</renderer>
<renderer mime="application/vnd.hp-PCL">
</renderer>
<renderer mime="image/svg+xml">
<format type="paginated"/>
<link value="true"/>
<strokeText value="false"/>
</renderer>
<renderer mime="application/awt">
</renderer>
<renderer mime="image/png">
<!--transparent-page-background>true</transparent-page-background-->
</renderer>
<renderer mime="image/tiff">
<!--transparent-page-background>true</transparent-page-background-->
<!--compression>CCITT T.6</compression-->
</renderer>
<renderer mime="text/xml">
</renderer>
<!-- RTF does not have a renderer
<renderer mime="text/rtf">
</renderer>
-->
<renderer mime="text/plain">
<pageSize columns="80"/>
</renderer>
</renderers>
</fop>
解决方法
阅读 Apache FOP 配置,您将需要在 pdf 渲染器 filterList 中指定的输出颜色空间,例如:
<output-profile>C:\FOP\Color\EuropeISOCoatedFOGRA27.icc</output-profile>
见https://xmlgraphics.apache.org/fop/1.1/configuration.html
当然,您需要为您的应用程序选择合适的“.icc”文件。