我正在尝试生成可访问的 PDF,这需要设置 PDF 的主要语言(PDF 语言标识符 - RFC 3066),并且文档在打开时显示标题而不是文件名。
目前,使用 \mainlanguage 或 \language 命令不会设置 PDF 语言标识符,并且在 \setupinteraction 中设置标题仍然显示文件名。
使用 LaTeX,可以通过设置 pdfdisplaydoctitle 和 pdflang 使用 hyperref 包来执行此操作。
有没有办法在 ConTeXt 中做同样的事情?
答案1
可以通过 设置文档标题\setupinteraction
。请记住,无法强制查看器显示该标题。有些查看器会选择无论如何都显示文件名。
我查看了hyperref
源代码以了解pdflang
和的pdfdisplaydoctitle
处理方式,发现它们被放置在中\pdfcatalog
。ConTeXt 将 pdfcatalog 的概念完全抽象为高级接口。不幸的是,pdflang
和pdfdisplaydoctitle
无法从高级访问,因此我们必须一直深入到 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 >>>>