我正在使用FOP 2.1并尝试设置ViewerPreferences,例如DisplayDocTitle-> true。

我正在尝试(来自this question

<fo:declarations>
    <pdf:dictionary type="Catalog" xmlns:pdf="http://xmlgraphics.apache/org/fop/extensions/pdf">
        <pdf:dictionary type="normal" key="ViewerPreferences">
            <pdf:entry key="DisplayDocTitle" type="boolean">true</pdf:entry>
        </pdf:dictionary>
    </pdf:dictionary>
    <x:xmpmeta xmlns:x="adobe:ns:meta/">
    ...


但是得到

Jul 13, 2016 11:18:31 AM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Unknown formatting object "{http://xmlgraphics.apache/org/fop/extensions/pdf}dictionary" encountered (a child of fo:declarations}. (See position 242:105)
Jul 13, 2016 11:18:31 AM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Unknown formatting object "{http://xmlgraphics.apache/org/fop/extensions/pdf}dictionary" encountered (a child of dictionary}. (See position 243:69)


且pdf内没有ViewerPreferences。

当我将字典放在<x:xmpmeta xmlns:x="adobe:ns:meta/">下面时,我也没有得到ViewerPreferences,只有pdfbox预检会抱怨

The file test.pdf is not valid, error(s) :
7.3 : Error on MetaData, Cannot find a definition for the namespace http://xmlgraphics.apache/org/fop/extensions/pdf


我在做错什么,我还为时过早尝试吗?我必须在哪里修补FOP?

最佳答案

根据引入的release notes FOP 2.0,



增强PDF /Catalog/Page词典的底层机制



但是在网站上没有很多使用它的例子。

通过查看源代码分发中包含的testcases,尤其是名为pdf-dictionary-extension_*.xml的,我能够将类似于您的代码的东西放在一起,它不会生成运行时异常。坦白地说,我对这个PDF功能还不够熟悉,无法说出输出是否真正实现了您要执行的操作:

<fo:declarations>
  <pdf:catalog xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf">
    <pdf:dictionary type="normal" key="ViewerPreferences">
      <pdf:boolean key="DisplayDocTitle">true</pdf:boolean>
    </pdf:dictionary>
  </pdf:catalog>
</fo:declarations>



没有<pdf:dictionary type="Catalog">,而是有pdf:catalog
没有单个<pdf:entry key="..." type="...">元素,但是每种可能的输入类型都有一个特定的元素:pdf:arraypdf:booleanpdf:namepdf:numberpdf:string,...


(披露:我是一名FOP开发人员,尽管现在不是很活跃)

10-07 19:37
查看更多