如何通过Ghostscript从PostScript文件生成无障碍PDF?求相关文档与示例
从PostScript生成无障碍PDF:Ghostscript pdfmark与/BDC实践
核心参考文档
Ghostscript自带的本地文档是最权威的实操参考:
gs/doc/PDFUA.htm:详细讲解PDF/UA规范在Ghostscript中的落地方法,包括结构树构建、标记内容的规则,以及如何通过pdfmark定义符合WCAG 2.0要求的无障碍属性。gs/doc/pdfmark.htm:官方pdfmark命令手册,其中专门章节覆盖了/BDC(Begin Marked Content)、/EMC(End Marked Content)的用法,以及结构元素(StructElem)的属性定义细节。
实操示例
以下是几个关键场景的PostScript代码示例,可直接添加到你的PS文件中:
示例1:构建文档结构与标题标记
% 定义文档目录和结构树根 [ /_objdef {Catalog} /type /dict /OBJ pdfmark [ {Catalog} /PageMode /UseOutlines /StructTreeRoot {StructTreeRoot} /PUT pdfmark [ /_objdef {StructTreeRoot} /type /dict /OBJ pdfmark [ {StructTreeRoot} /K [ {H1_1} ] /PUT pdfmark % 定义一级标题结构元素 [ /_objdef {H1_1} /type /dict /OBJ pdfmark [ {H1_1} /Type /StructElem /S /H1 /P {StructTreeRoot} /K 0 /PUT pdfmark % 用BDC标记标题内容(关联到H1_1结构) /H1_1 /BDC (年度销售报告) show /EMC
示例2:标记段落与图片替代文本
% 定义段落结构元素 [ /_objdef {P_1} /type /dict /OBJ pdfmark [ {P_1} /Type /StructElem /S /P /P {StructTreeRoot} /K 0 /PUT pdfmark % 标记正文段落 /P_1 /BDC (本报告展示了2023年各区域的销售数据,其中华东区域贡献占比最高。) show /EMC % 定义图片结构并添加替代文本 [ /_objdef {SalesChart} /type /dict /OBJ pdfmark [ {SalesChart} /Type /StructElem /S /Figure /P {StructTreeRoot} /Alt (2023年华东、华北、华南区域销售占比柱状图) /PUT pdfmark % 标记图片内容 /SalesChart /BDC % 此处替换为你的图片绘制PostScript代码 0 0 200 150 rectstroke /EMC
示例3:列表结构标记
% 定义列表及列表项结构 [ /_objdef {List_1} /type /dict /OBJ pdfmark [ {List_1} /Type /StructElem /S /L /P {StructTreeRoot} /K [ {LI_1} {LI_2} ] /PUT pdfmark [ /_objdef {LI_1} /type /dict /OBJ pdfmark [ {LI_1} /Type /StructElem /S /LI /P {List_1} /K 0 /PUT pdfmark [ /_objdef {LI_2} /type /dict /OBJ pdfmark [ {LI_2} /Type /StructElem /S /LI /P {List_1} /K 0 /PUT pdfmark % 标记列表项内容 /LI_1 /BDC (华东区域:45%) show /EMC /LI_2 /BDC (华北区域:30%) show /EMC
关键注意事项
- 所有需要被无障碍识别的内容,必须用
/BDC和/EMC包裹,且每个标记块要对应一个预定义的结构元素。 - 结构元素的
/S属性必须使用PDF/UA标准类型(如/H1-/H6、/P、/Figure、/L、/LI等),避免自定义类型导致屏幕阅读器无法识别。 - 必须在Catalog字典中指定
/StructTreeRoot,否则整个结构树不会被PDF阅读器解析。 - 运行Ghostscript时需指定PDF/UA输出参数,例如:
gs -dPDFA=2 -dPDFACompatibilityPolicy=1 -sDEVICE=pdfwrite -o output.pdf input.ps
内容的提问来源于stack exchange,提问作者srikrishnan
相关产品推荐
相关产品推荐

