I'm using FOP 2.1 and am trying to set ViewerPreferences, e.g. DisplayDocTitle -> true.
I'm trying (from 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/">
...
but getting
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)
and no ViewerPreferences inside the pdf.
When I put the dictionarys below the <x:xmpmeta xmlns:x="adobe:ns:meta/">
then I get no ViewerPreferences either, only pdfbox preflight will then complain about
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
What am I doing wrong, am I too early to try it? Where do I have to patch fop?
According to the release notes FOP 2.0 introduced, among other things, a
but there are not many examples of its usage in the website.
Looking at the testcases included in the source distribution, in particular the ones named
pdf-dictionary-extension_*.xml
, I was able to put together something similar to your code which does not generate run-time exceptions; admittedly, I'm not familiar enough with this PDF feature to say whether the output actually achieves what you are trying to do:<pdf:dictionary type="Catalog">
, there ispdf:catalog
instead<pdf:entry key="..." type="...">
element, but there is a specific element for each possible entry type:pdf:array
,pdf:boolean
,pdf:name
,pdf:number
,pdf:string
, ...(disclosure: I'm a FOP developer, though not very active nowadays)
As supplement to @lfurini's excellent finding, here are some more thing that can be done that way easily, tested with fop 2.1, but could also work from 2.0:, remove the comments from the relevant sections to try:
Details of possible values can be looked up in the pdf specification (from page 139 in this v1.7 version, TABLE 3.25 Entries in the catalog dictionary), take care not to use values that would normally be set by fop anyway, restrict yourself to viewer/reader relevant stuff.