1

我想在 PdfCanvas 中添加一个元素,代码如下。为什么我在文档标签中看不到“图”?

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();
4

1 回答 1

3

首先,您的代码不完整,因此我们甚至不知道您是否调用setTagged()PdfDocument实例(这是标记的必要条件)。

但更大的问题是beginMarkedContent它本身并没有添加任何从内容到标签树的连接。添加这些连接的最佳方法是使用TagTreePointer(如果您真的想使用低级PdfCanvasAPI)。您可以使用 操作树结构TagTreePointer并在树和内容之间添加连接PdfCanvas#openTag

此外,您似乎正在尝试添加扩展文本 ( Eyes Wide Shut) dict.put(PdfName.Span, new PdfString("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();

生成的标签结构:

标签结构

于 2019-01-01T12:17:44.413 回答