IText7> 如何将 PdfCanvas 的内容添加为 PdfName.Figure 以获得 PDF/UA 辅助功能
IText7> How to add a content of PdfCanvas as PdfName.Figure for PDF/UA Accessibility
我想在PdfCanvas中添加一个元素,代码如下。为什么我在文档标签中看不到 "Figure"?
PdfCanvas canvas = new PdfCanvas(pdf.addNewPage());
canvas.beginText();
canvas.setFontAndSize(font, 12);
canvas.showText("Test for Accessibility");
canvas.stroke();
PdfDictionary dict = new PdfDictionary();
dict.put(PdfName.Span, new PdfString("Eyes Wide Shut"));
canvas.beginMarkedContent(PdfName.Figure, dict);
canvas.newlineShowText("EWS");
canvas.endMarkedContent();
canvas.endText();
首先,您的代码不完整,因此我们甚至不知道您是否在 PdfDocument
实例(这是标记所必需的)上调用 setTagged()
。
但更大的问题是 beginMarkedContent
本身不会添加从内容到标签树的任何连接。添加这些连接的最佳方法是使用 TagTreePointer
(如果你真的想使用低级 PdfCanvas
API)。您可以使用 TagTreePointer
操作树结构,并使用 PdfCanvas#openTag
.
在树和内容之间添加连接
此外,您似乎试图用 dict.put(PdfName.Span, new PdfString("Eyes Wide Shut"));
添加扩展文本 (Eyes Wide Shut
),但从 PDF 语法的角度来看,此表达式没有任何用处。 TagTreePointer
的 API 也允许您轻松设置扩展文本。
总而言之,完整的代码如下所示:
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outFilePath));
pdfDocument.setTagged();
PdfPage firstPage = pdfDocument.addNewPage();
PdfCanvas canvas = new PdfCanvas(firstPage);
TagTreePointer tagPointer = new TagTreePointer(pdfDocument);
tagPointer.setPageForTagging(firstPage);
tagPointer.addTag(StandardRoles.P).addTag(StandardRoles.SPAN);
canvas.beginText()
.setFontAndSize(PdfFontFactory.createFont(), 12)
.openTag(tagPointer.getTagReference())
.showText("Test for Accessibility")
.closeTag()
.stroke();
tagPointer.moveToParent().addTag(StandardRoles.SPAN).getProperties().setExpansion("Eyes Wide Shut");
canvas.openTag(tagPointer.getTagReference())
.newlineShowText("EWS")
.closeTag()
.endText();
pdfDocument.close();
生成的标签结构:
我想在PdfCanvas中添加一个元素,代码如下。为什么我在文档标签中看不到 "Figure"?
PdfCanvas canvas = new PdfCanvas(pdf.addNewPage());
canvas.beginText();
canvas.setFontAndSize(font, 12);
canvas.showText("Test for Accessibility");
canvas.stroke();
PdfDictionary dict = new PdfDictionary();
dict.put(PdfName.Span, new PdfString("Eyes Wide Shut"));
canvas.beginMarkedContent(PdfName.Figure, dict);
canvas.newlineShowText("EWS");
canvas.endMarkedContent();
canvas.endText();
首先,您的代码不完整,因此我们甚至不知道您是否在 PdfDocument
实例(这是标记所必需的)上调用 setTagged()
。
但更大的问题是 beginMarkedContent
本身不会添加从内容到标签树的任何连接。添加这些连接的最佳方法是使用 TagTreePointer
(如果你真的想使用低级 PdfCanvas
API)。您可以使用 TagTreePointer
操作树结构,并使用 PdfCanvas#openTag
.
此外,您似乎试图用 dict.put(PdfName.Span, new PdfString("Eyes Wide Shut"));
添加扩展文本 (Eyes Wide Shut
),但从 PDF 语法的角度来看,此表达式没有任何用处。 TagTreePointer
的 API 也允许您轻松设置扩展文本。
总而言之,完整的代码如下所示:
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outFilePath));
pdfDocument.setTagged();
PdfPage firstPage = pdfDocument.addNewPage();
PdfCanvas canvas = new PdfCanvas(firstPage);
TagTreePointer tagPointer = new TagTreePointer(pdfDocument);
tagPointer.setPageForTagging(firstPage);
tagPointer.addTag(StandardRoles.P).addTag(StandardRoles.SPAN);
canvas.beginText()
.setFontAndSize(PdfFontFactory.createFont(), 12)
.openTag(tagPointer.getTagReference())
.showText("Test for Accessibility")
.closeTag()
.stroke();
tagPointer.moveToParent().addTag(StandardRoles.SPAN).getProperties().setExpansion("Eyes Wide Shut");
canvas.openTag(tagPointer.getTagReference())
.newlineShowText("EWS")
.closeTag()
.endText();
pdfDocument.close();
生成的标签结构: