您可以根据需要自定义相应的标签工作者。您可以获得由标签工作者生成的结果布局元素并对其进行操作。特别是,如果需要,您可以显式指示元素不在标记结构树中创建节点。
因此,对于您的示例,布局元素的结构大致为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);