如何用itextpdf-5.5.13的低级对象标记PDF文件

问题描述 投票:0回答:1

我试图使用itext5的低级对象创建标签PDF,如下图所示

    document.open();
    PdfStructureTreeRoot structureTreeRoot = writer.getStructureTreeRoot();
    PdfStructureElement top = new PdfStructureElement(structureTreeRoot, PdfName.DOCUMENT);
    PdfStructureElement element = new PdfStructureElement(top, PdfName.P);
    PdfContentByte cb = writer.getDirectContent();
    BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, false);
    cb.setLeading(16);
    cb.setFontAndSize(bf, 12);
    cb.beginText();
    cb.setTextMatrix(50, 700);
    cb.beginMarkedContentSequence(element);
    cb.newlineShowText("Hello There");
    cb.endMarkedContentSequence();
    cb.endText();
    document.close();`

代码生成的pdf在acrobat DC pro中打开,但当我检查标签时,acrobat没有反应。在检查itext-rups中的结构树时,我发现StructureTreeRoot数组包含null而不是StructureElement,而且在XRef中第二和第三个对象也不见了。Structure tree in itext-rups

我是一个新的pdf生成者,写的代码参考了 标签:PDF. 在项目中必须使用itext5低级对象。

pdf itext pdf-generation
1个回答
0
投票

由于你在这里使用的是低级的API,有相当多的工作需要你显式地去做,否则这些工作会自动为你完成。

例如,在目前的情况下,你必须显式的添加 PdfStructureElement 在关闭文档之前,将其添加到文档中,即

[...]
cb.endText();
writer.addToBody(element, element.getReference());
writer.addToBody(top, top.getReference());
document.close();
© www.soinside.com 2019 - 2024. All rights reserved.