使用 Apache FOP 创建“可访问”文档 - 不完全是一个非常容易访问的主题

问题描述 投票:0回答:1

我正在尝试编写一个 .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 中创建标记元素。

有好心人对此有想法或好的链接或描述吗?

accessibility apache-fop
1个回答
0
投票

为了向生成的 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 中。这是通过使用

role
XSL-FO 属性来实现的:

PDF 参考的链接似乎已损坏,因此这里有一些可用链接:

  • PDF 参考,版本 1.4(FOP 的网站似乎引用了):查看 9.7 标记 PDF 部分,特别是 9.7.4 标准结构类型,了解
    role
  • 的可能值
  • PDF 参考,版本 1.7:查看 10.7 标记 PDF 部分,特别是 10.7.3 标准结构类型,了解
    role
  • 的可能值

请注意,即使您不使用

role
属性,FOP 也应该使用默认值(例如,
P
表示
fo:block
元素)。

如果可访问性检查器向您发出警告,则可能还有其他问题。

例如,确保您已启用辅助功能(使用

-a
命令行选项、在 Java 代码中设置
userAgent.setAccessibility(true)
,或在 fop.xconf 配置文件中添加
<accessibility>true</accessibility>
)。

© www.soinside.com 2019 - 2024. All rights reserved.