ConTeXt 中 pdfdisplaydoctitle 和 pdflang 的等效设置?

ConTeXt 中 pdfdisplaydoctitle 和 pdflang 的等效设置?

我正在尝试生成可访问的 PDF,这需要设置 PDF 的主要语言(PDF 语言标识符 - RFC 3066),并且文档在打开时显示标题而不是文件名。

目前,使用 \mainlanguage 或 \language 命令不会设置 PDF 语言标识符,并且在 \setupinteraction 中设置标题仍然显示文件名。

使用 LaTeX,可以通过设置 pdfdisplaydoctitle 和 pdflang 使用 hyperref 包来执行此操作。

有没有办法在 ConTeXt 中做同样的事情?

答案1

可以通过 设置文档标题\setupinteraction。请记住,无法强制查看器显示该标题。有些查看器会选择无论如何都显示文件名。

我查看了hyperref源代码以了解pdflang和的pdfdisplaydoctitle处理方式,发现它们被放置在中\pdfcatalog。ConTeXt 将 pdfcatalog 的概念完全抽象为高级接口。不幸的是,pdflangpdfdisplaydoctitle无法从高级访问,因此我们必须一直深入到 Lua 才能将内容注入 pdfcatalog。我在pdf-ua.mkiv测试文件。

\setupinteraction
  [state=start,
   title={Foobar}]

\setupbackend
  [level=0] % compresslevel=0, so I can inspect the PDF

\startluacode
    lpdf.addtocatalog("Lang",lpdf.string("\currentmainlanguage"))
    lpdf.addtocatalog("ViewerPreferences",lpdf.dictionary{DisplayDocTitle = true})
\stopluacode

\starttext

Hello World

\stoptext
$ grep --text Catalog test.pdf
<</Type/Catalog/Pages 11 0 R /Lang (en) /Metadata 12 0 R /PageLabels << /Nums [ 0 << /S /D /St 1 >> ] >> /PageMode /UseNone /Version /1.7 /ViewerPreferences << /DisplayDocTitle true >>>>

相关内容