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);
我将使用 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);