itext7 pdfHTML 添加页面标题没有 PAC 工具警告

itext7 pdfHTML add page title without PAC tool warnings

我将使用 itext7 创建辅助功能 pdf。在 html 文件中使用标签添加页面标题时,它会收到警告,“Possibly inappropriate use of P Structure element”。原因是 iText 在标签内添加了额外的

标签。 HTML代码:

<!DOCTYPE html>
    <html>
      <body>
         <h1>Title</h1>
      </body>
    </html>

当我使用 iText7 pdfHTML add-on 生成 pdf 时,它显示如下;

<h1><p><span>Title

<p> 标记是警告的原因。 然后它returns PAC 工具警告。没有得到任何警告,应该是,

<h1><span>Title

请帮我解决这个问题。 提前致谢

您可以根据需要自定义相应的tag worker。您可以获得标签工作者生成的结果布局元素并对其进行操作。特别是,如果需要,您可以明确指示元素不在标记结构树中创建节点。

因此对于您的示例,布局元素的结构大致为 Div <- Paragraph <- "Title"。下面的代码所做的是找到一个段落并将其可访问性角色设置为 null,这样就不会在标签树中创建一个节点。

自定义标签工作者:

private static class CustomH1TagWorker extends HTagWorker {
    public CustomH1TagWorker(IElementNode element, ProcessorContext context) {
        super(element, context);
    }

    @Override
    public IPropertyContainer getElementResult() {
        IPropertyContainer baseResult = super.getElementResult();
        if (baseResult instanceof BlockElement && ((BlockElement) baseResult).getChildren().size() == 1
             && ((BlockElement) baseResult).getChildren().get(0) instanceof Paragraph) {
            ((Paragraph) ((BlockElement) baseResult).getChildren().get(0)).getAccessibilityProperties().setRole(null);
        }
        return baseResult;
    }
}

创建 ConverterProperties 并调整 TagWorkerFactory。确保将转换器属性传递给 HtmlConverter.

ConverterProperties properties = new ConverterProperties();

properties.setTagWorkerFactory(new DefaultTagWorkerFactory() {
    @Override
    public ITagWorker getCustomTagWorker(IElementNode tag, ProcessorContext context) {
        if (TagConstants.H1.equals(tag.name())) {
            return new CustomH1TagWorker(tag, context);
        }
        return super.getCustomTagWorker(tag, context);
    }
});

HtmlConverter.convertToPdf(inputStream, pdfDocument, properties);