如何在 Apache FOP 中设置默认语言

Posted

技术标签:

【中文标题】如何在 Apache FOP 中设置默认语言【英文标题】:How to set the default language in Apache FOP 【发布时间】:2016-12-25 08:31:18 【问题描述】:

我正在使用 Apache FOP 2.1 生成 PDF 文件。

为此,我尝试将默认语言设置为英语。 这应该在创建 PDF 后通过 Adob​​e Reader 的选项文件/属性/高级/阅读选项进行验证。该值当前为空。

我尝试在fo:root 元素、第一页序列或.xsl 文件的第一个元素中设置xml:lang="en"... 没有任何接缝可以解决问题。

有什么建议吗? 谢谢迪米特里斯。

更新: 我已经按照答案中的建议尝试了另外 2 个选项,这 2 个都不起作用

    <fo:declarations> <pdf:catalog xmlns:pdf="http://xmlgraphics.apache.org/fop/‌extensions/pdf"> <pdf:string key="Lang">en</pdf:string> </pdf:catalog> <x:xmpmeta xmlns:x="adobe:ns:meta/"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:title>the document title</dc:title> <dc:language>en</dc:language>

更新 2 已经开始在这个问题上悬赏。 任何帮助表示赞赏和奖励

【问题讨论】:

嗯,尝试使用来自***.com/questions/38347687 的答案和我会&lt;fo:declarations&gt;&lt;pdf:catalog xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf"&gt;&lt;pdf:string key="Lang"&gt;en&lt;/pdf:string&gt;&lt;/pdf:catalog&gt;... 的pdf 参考资料(不知道xmlns 中的; 来自哪里)(以及fo 中的xml:lang="en" :root) 但它也不会在 acrobat 标记中显示语言 然而,在我之前的评论中,该 pdf 文件上的 exiftool 将显示 Language : en,因此它可以正确地放入文件中。问题可能是 acrobat 属性对话框中的字段引用了不同的内容。另见PDF16: Setting the default language using the /Lang entry in the document catalog of a PDF document 我的猜测是它在 Reader 中不起作用。如果您转到上面的页面:w3.org/TR/WCAG20-TECHS/PDF16.html,然后下载他们引用的确切示例并查看属性,它显示为空白。我还从 FOP、RenderX、Word 中搜索了我的 PDF ......一些标记的,各种类型的。以这种方式查看时,我找不到任何有价值的东西。 您是否有 PDF 样本...任何以任何方式生成的 PDF 都可以显示 Reader 中的语言?如果你这样做了,也许我们可以看看 PDF 看看有什么不同。如果您找不到,那么问题的答案是......“问 Adob​​e”(虽然对于 *** 作为答案来说这太短了:)) 我下载了 Adob​​e Acrobat Pro,在 xml:lang="en" 中设置时会显示在 Pro 的属性中,但在 Adob​​e Reader(免费版)中不显示。看起来像一个限制/错误 【参考方案1】:

您可能需要设置language (http://www.w3.org/TR/xsl/#language)。参见http://xmlgraphics.apache.org/fop/compliance.html中的“语言”

你认为xml:lang 会起作用,但你说它不起作用。 FOP FAQ 有一个关于设置language 来控制断字的答案,因此即使language 被定义为仅适用于fo:blockfo:character,也值得一试。

您可能需要启用可访问的 PDF。请参阅https://xmlgraphics.apache.org/fop/2.1/accessibility.html,其中引用了 PDF 中设置的语言(包括来自xml:lang)。

【讨论】:

谢谢托尼,这些我已经试过了……它们没有任何影响【参考方案2】:

根据我所尝试的一切,adobe reader显示的文档属性中的语言字段与pdf中实际找到的文档语言没有太大关系(它总是空的)。

FOP 2.1 的 fo:root 中的 xml:lang="en" 标记足以让 exiftool 将文档列为具有英语语言,也足以让 pdfbox 中的 PDFDebugger 在文档目录中显示 /Lang 条目,该条目是根据pdf_reference 1.7 表3.25“目录字典中的条目”指定语言的地方。

代码

<fo:declarations>
 <pdf:catalog 
   xmlns:pdf="http://xmlgraphics.apache.org/fop/‌extensions/pdf"‌​>
    <pdf:string key="Lang">en</pdf:string>
   </pdf:catalog>

在 pdf 输出中的作用与 xml:lang 完全相同。

此外,您还可以在元数据中设置语言(也在fo:declarations 中)

<x:xmpmeta 
  xmlns:x="adobe:ns:meta/" 
  xmlns:dc="http://purl.org/dc/elements/1.1/" 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:RDF>
      <rdf:Description rdf:about="">
        <dc:language><rdf:Bag><rdf:li>en</rdf:li></rdf:Bag></dc:language>

但如果 xml:lang 存在,我的 fop 2.1 似乎设置得太自动了。

因此,如果有人能够解释 adobe 阅读器中的文档语言属性实际显示的内容,那将会很有趣。

【讨论】:

好吧,他们设置文档的语言。您可以提出不同的问题:Adobe Reader 在语言字段中显示的是什么?也许这会吸引那些可以回答的人。或者在 adobe 上查看一些论坛。 让我们看看这里会发生什么Reader Document Property "Language" 我看你也很想知道 - 询问 fop 邮件列表也是个好主意 ;-)

以上是关于如何在 Apache FOP 中设置默认语言的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JVM 中设置默认语言环境?

如何在ResourceBundleMessageSource中设置默认语言环境?

在 OSX 上的 C 代码中设置工作目录

如何在 Angular 2 中的 DatePipe 中设置语言环境?

如何在apache中设置每个连接的最大请求数

如何在 Apache 2.4 cookie 中设置 unix 时间戳?