Вы на правильном пути. Обычно функцию getElementResult()
можно переопределить, чтобы получить объект, к которому можно добавить атрибуты доступности. Ссылки - это особый случай, потому что есть оба объекта, такие как аннотации Paragraphs и (кликабельное поле, которое накладывается, но не имеет прямого отношения к тексту). Это означает, что вам нужно пройти через функцию 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 Worker:
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);
}
}
}
}