我正在使用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:array
,pdf:boolean
,pdf:name
,pdf:number
,pdf:string
,...(披露:我是一名FOP开发人员,尽管现在不是很活跃)