Исправление проблемы доступности PDF (альтернативное описание отсутствует для аннотации) в ссылках - PullRequest
0 голосов
/ 29 августа 2018

Сгенерировал доступный pdf с помощью надстройки pdfHTMl в iText 7. Чтобы добавить ссылку на использованный ниже код pdf в HTML-файле,

<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 выдает ошибку, говоря «Альтернативное описание отсутствует для аннотации». Я видел ту же проблему, уже поднятую здесь. Исправление проблемы доступности PDF (альтернативное описание отсутствует для аннотации) при преобразовании HTML-страницы в PDF и

Исправление ошибки ссылки, pdfHTML

Но там не упоминается, что является ответом на этот вопрос. Вот почему я вырос новый. Я устал создавать собственные теги с помощью aTagWorker. Но элемент отображается как JSoupElementNode в методе ProcessEnd. Как установить доступные свойства для элементов типа JSoupElementNode? Пожалуйста, помогите мне решить эту проблему. Спасибо

1 Ответ

0 голосов
/ 05 сентября 2018

Вы на правильном пути. Обычно функцию 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);
            }
        }


    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...