使用FOP时无法在PDF中添加附件

时间:2015-01-23 13:05:44

标签: xml pdf apache-fop

我有一个XSL文档,可以将XML文档转换为PDF。它一直工作正常,直到我被要求增强这一点,以便也可以添加PDF的附件。我搜索并发现必须按照以下方式编辑XSL才能实现。

1. fo:root元素应包含 xmlns:pdf =" http://xmlgraphics.apache.org/fop/extensions/pdf 属性。

  1. 应在fo:page-sequence element之前添加以下一行。
  2. < FO:声明>
            < pdf:embedded-file filename =" myfile.text" SRC =" url(file:/// C:/Bill.txt" />
    < / FO:声明>

    现在,当我运行转换时,我收到以下错误。

    未知的格式化对象" {http://xmlgraphics.apache.org/fop/extensions/pdf} embedded-file"遇到(佛的孩子:声明}。(没有可用的上下文信息)

    我在互联网上搜索了很多但却无法找到解决方法。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

显然,您的代码片段似乎尊重扩展元素pdf:embedded-file的文档(请注意,http://xmlgraphics.apache.org/fop/extensions/pdf之类的命名空间URI只是一个标识符,它不一定指向Web资源)。

但是,我用FOP 1.1测试了这个简单的例子(顺便说一下,你没有说你正在使用哪个版本的FOP)并且它按预期工作:

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="one">
            <fo:region-body />
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:declarations>
      <pdf:embedded-file filename="test.png" description="This is just an image" src="https://www.google.it/images/srpr/logo11w.png"/>
    </fo:declarations>
    <fo:page-sequence master-reference="one">
        <fo:flow flow-name="xsl-region-body">
            <fo:block><fo:basic-link external-destination="url(embedded-file:test.png)">Attached image</fo:basic-link></fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

我能够生成您收到的错误消息未知格式化对象... 使用错误的命名空间URI ,例如在开头或结尾添加空格;所以我建议你检查你的pdf命名空间的声明是否完全像这样:

xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf"