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

8
我正在使用Apache FOP 2.1生成PDF文件。为此,我尝试将默认语言设置为英语。
预计在创建PDF后,通过Adobe Reader的选项 文件/属性/高级/阅读选项 进行验证。当前该值为空。

Image showing language is not set

我尝试在fo:root元素、第一个page-sequence或.xsl文件的第一个元素中设置xml:lang="en",但似乎都不起作用。有什么建议吗?谢谢Dimitris。
更新:我尝试了两个答案中提出的另外两种选项,但都没有起作用。其中一种是<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
已经在此问题上发起了悬赏。
任何帮助都将受到赏金的奖励。


嗯,尝试使用来自https://dev59.com/p5jga4cB1Zd3GeqPQuN9的答案和pdf参考文献,我会使用`fo:declarations<pdf:catalog xmlns:pdf="" rel = "nofollow noreferrer">http://xmlgraphics.apache.org/fop/extensions/pdf"><pdf:string key="Lang">en</pdf:string></pdf:catalog>...(不知道xmlns中的;来自哪里)(以及在fo:root中的xml:lang="en"`),但它不会在Acrobat标签中显示语言。 - Stefan Hegny
然而,在我之前的评论中,该PDF文件上的exiftool 将显示 Language: en,因此它正确地嵌入了文件。问题可能在于Acrobat属性对话框中的字段指的是不同的内容。另请参阅PDF16:使用PDF文档的文档目录中的/Lang条目设置默认语言 - Stefan Hegny
1
我的猜测是它在阅读器中无法正常工作。如果您访问上面的页面:https://www.w3.org/TR/WCAG20-TECHS/PDF16.html,然后下载他们引用的确切示例并查看属性,它会显示为空白。我还搜索了来自FOP、RenderX、Word等各种标记的PDF文件。但是我找不到任何一个在这种方式下查看时具有任何价值的文件。 - Kevin Brown
谢谢@KevinBrown,看起来是Adobe Reader的限制... 也许你需要专业版。 - Dimitris
1
你有没有一个PDF的样本...任何方式生成的PDF都可以...能够在Reader中显示语言的吗?如果有,也许我们可以查看这个PDF并看看有什么不同。如果你找不到一个,那么问题的答案是..."问问Adobe"(虽然这对于Stackoverflow来说太简短了 :)) - Kevin Brown
1
我已经下载了Adobe Acrobat Pro,当在fo:root中设置xml:lang="en"时,它会显示在Pro的属性中,但不会在Adobe Reader(免费版本)中显示。看起来像是一种限制/错误。 - Dimitris
2个回答

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>

但是我的fop 2.1似乎会自动设置xml:lang,如果存在的话。因此,如果有人能解释Adobe Reader中的文档语言属性实际上显示了什么,那将会很有趣。

它们可以在设置文档语言时起作用。你可以换一种方式提问:Adobe Reader在语言字段中显示的是什么?也许这会吸引那些能够回答的人。或者去adobe的一些论坛查看。 - Stefan Hegny
让我们看看这里会出现什么 [阅读器文档属性“语言”] (https://forums.adobe.com/message/8952443) - Stefan Hegny
我看到你也很想知道 - 在fop邮件列表上询问也是一个好主意;-) - Stefan Hegny

1
你可能需要设置 language (http://www.w3.org/TR/xsl/#language)。请参阅 http://xmlgraphics.apache.org/fop/compliance.html 中的“language”。
你可能认为 xml:lang 可以起作用,但事实并非如此。FOP FAQ 中有关于设置 language 控制连字的答案,因此值得尝试,即使 language 仅定义适用于 fo:blockfo:character
您可能需要启用可访问的 PDF。请参见https://xmlgraphics.apache.org/fop/2.1/accessibility.html,其中提到了在 PDF 中设置语言(包括来自xml:lang)。

谢谢Tony,我已经尝试过这些了……它们没有任何作用。 - Dimitris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接