IText7>如何将PdfCanvas的内容作为PdfName添加。

时间:2018-12-28 09:24:17

标签: java itext7

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

     <div style="display:inline-block;vertical-align:top;">
      <button id="button_test">
      <img src="https://cdn2.iconfinder.com/data/icons/facebook-ui-colored/48/JD-22-64.png" alt="img"/>
        <div style="display:block;"><%= Variable %></div>
      </button>
        
    </div>
    
    </div>

1 个答案:

答案 0 :(得分:3)

首先,您的代码尚不完整,因此我们甚至都不知道您是否在setTagged()实例上调用PdfDocument(这是标记所必需的)。

但是更大的问题是beginMarkedContent本身并未添加从内容到标签树的任何连接。添加这些连接的最佳方法是使用TagTreePointer(如果您确实想使用低级PdfCanvas API)。您可以使用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();

结果标签结构:

tag structure