使用iText 7中的pdfHTMl插件生成可访问的pdf。要添加链接到HTML文件中代码下面使用的pdf,
<a href="www.google.com" title="web">www.google.com</a>
C#代码如下:
IList<IElement> elements = HtmlConverter.ConvertToElements(htmlFile,converterProperties);
foreach(IElement element in elements){
doc.Add((IBlockElement)element);
}
链接出现在pdf中如预期的那样。 PAC工具提供错误说“注释缺少替代描述”。我在这里看到了同样的问题。 Fixing a PDF Accessibility Issue (Alternative description missing for an annotation) when converting an HTML Page to PDF和
但是没有提到什么是提取答案。这就是为什么我提出新的。我厌倦了使用theTagWorker创建自定义标签。但元素在ProcessEnd方法中显示为JSoupElementNode。如何为JSoupElementNode类型的元素设置可访问的属性?请帮我解决这个问题。谢谢
你走在正确的轨道上。通常,可以重写getElementResult()
函数以获取可以添加辅助功能属性的对象。链接是一种特殊情况,因为有两个对象,如段落和注释(一个可重复的框,重叠,但与文本没有直接关系)。这意味着你必须通过processsEnd()
功能。此时,getAllElements()
将返回链接的子元素。
这是我与其他人合作时提出的解决方案。注意,它假设链接的子元素是Text
元素,在典型情况下是正确的,但不一定在每种情况下都是如此。
设置HtmlWorker以使用新的ATagWorker
ConverterProperties converterProperties = new ConverterProperties();
converterProperties.setTagWorkerFactory(new DefaultTagWorkerFactory() {
@Override
public ITagWorker getCustomTagWorker(
IElementNode tag, ProcessorContext context) {
if ("a".equalsIgnoreCase(tag.name())) {
return new AccessibleATagWorker(tag, context);
}
return null;
}
});
...
HtmlConverter.convertToPdf( ... , ... , converterProperties);
而自定义A标签工作者:
class AccessibleATagWorker extends ATagWorker {
private String ALTERNATE_DESCRIPTION;
public AccessibleATagWorker(IElementNode element, ProcessorContext context) {
super(element, context);
ALTERNATE_DESCRIPTION = element.getAttribute("title");
}
@Override
public void processEnd(IElementNode element, ProcessorContext context) {
super.processEnd(element, context);
List < IPropertyContainer > containedElements = this.getAllElements();
for (int x = 0; x < containedElements.size(); x++) {
if (containedElements.get(x) instanceof Text) {
((Text) containedElements.get(x)).getAccessibilityProperties().setAlternateDescription(ALTERNATE_DESCRIPTION);
}
}
}
}