我试图使用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中第二和第三个对象也不见了。
我是一个新的pdf生成者,写的代码参考了 标签:PDF. 在项目中必须使用itext5低级对象。
由于你在这里使用的是低级的API,有相当多的工作需要你显式地去做,否则这些工作会自动为你完成。
例如,在目前的情况下,你必须显式的添加 PdfStructureElement
在关闭文档之前,将其添加到文档中,即
[...]
cb.endText();
writer.addToBody(element, element.getReference());
writer.addToBody(top, top.getReference());
document.close();