我正在尝试编写一个 .xslt 文件(作为 Apache FOP 的输入),其目的是生成一个“可访问”文档(在我们的例子中,这意味着:生成的 PDF 文件必须通过 PAC 所做的检查 - PDF 辅助功能检查器)。
我的文件实际上仍处于“hello world”状态:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xml:lang="en_US">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master
master-name="A4-portrait" page-height="29.7cm" page-width="21.0cm">
<fo:region-body region-name="main-content" margin="2cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="main-content">
<fo:block font-family="Verdana">Hello, <xsl:value-of select="data/name" />! This is some sample text.</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
但是我已经遇到了一些“可访问性错误”。
一个是“未标记的文本对象”。引用的文本对象是包含“Hello ...”文本的 fo:block。我在谷歌上搜索了相当长一段时间,但我没有找到有用的解释或描述或任何指导,在这样的 .fo/.xslt 文件中必须做什么才能在生成的 PDF 中创建标记元素。
有好心人对此有想法或好的链接或描述吗?
为了向生成的 PDF 添加辅助功能信息,您可以使用 FO 元素上的
role
属性来指定所包含文本的结构/语义功能。
来自 FOP 的辅助功能页面:
PDF 参考定义了一组标准结构类型来标记内容。例如,“P”用于标识段落,“H1”到“H6”用于标头,“L”用于列表,“Div”用于块级元素组等。该标准集旨在提高各元素之间的互操作性。生成或使用 PDF 的应用程序。
FOP 提供了格式化对象到该标准集中元素的默认映射。例如,fo:page-sequence 映射到 ‘Part’,fo:block 映射到 ‘P’,fo:list-block 映射到 ‘L’,等等
您可能想要自定义该映射以提高标记的准确性或处理特定的 FO 构造。例如,您可能希望使用“H1”到“H6”标签使文档的层次结构显示在 PDF 中。这是通过使用
XSL-FO 属性来实现的:role
PDF 参考的链接似乎已损坏,因此这里有一些可用链接:
role
role
请注意,即使您不使用
role
属性,FOP 也应该使用默认值(例如,P
表示 fo:block
元素)。
如果可访问性检查器向您发出警告,则可能还有其他问题。
例如,确保您已启用辅助功能(使用
-a
命令行选项、在 Java 代码中设置 userAgent.setAccessibility(true)
,或在 fop.xconf 配置文件中添加 <accessibility>true</accessibility>
)。