使用itext时是否可以根据页面内容添加脚注?

时间:2018-09-25 06:35:36

标签: java itext

我正在使用Itext 5.5,现在,我有一个PdfPageEventHelper的自定义实现,该实现为包含页码信息的页面添加了页脚。

我的应用程序中的最新更改导致存在必要的脚注。我创建PDF的方式(从组件列表中动态创建)使实际上无法确定哪个页面包含哪些项目,因为这是可自定义样式选项的一部分。

但是,我需要在脚注标记上添加说明。 我现在所采用的方法是简单地通知PdfPageEventHelper:在文档中的某个地方,至少有一个元素需要(目前仅)脚注,然后将说明性脚注添加到 every < / em>页面。

这是我要避免的事情,因为未来可能会带来更多的脚注和解释。 所以问题是:

我可以直接解析当前页面内容并扫描标记文字的存在吗?还是有另一种方法来查看当前页面是否需要说明性脚注?

到目前为止,我的失败方法(全部在onEndPage(PdfWriter, Document)中):

PdfContentByte cb = writer.getDirectContent();
PdfReader reader = new PdfReader(cb.toPdf(writer());
// this led to InvalidPdfException
----
ColumnText ct = new ColumnText(cb);
ct.getCompositeElements();
// returned null, I expected the current page contents
----
OutputStreamCounter oc = writer.getOs();
// did not expose any useful methods. also, cannot read from OutputStream

搜索该问题产生了数十个结果-如何添加页码或如何添加文档静态的,用户特定的标题。但是没有页面依赖。

哦,这并没有真正的帮助: Adding a pdf footer conditionally on certain pages in a multi-page pdf document

基本上与我的问题完全相同。

1 个答案:

答案 0 :(得分:1)

基本上,您必须采用另一种方法:

只需在脚注标记的块中添加通用标签。然后,您的页面事件侦听器将在页面开始和结束之间收到有关此通用标记的通知。因此,如果您在onGenericTag中设置了一个标志,则您的onEndPage方法只需要检查(然后重置)该标志并相应地添加脚注即可。

您甚至可以使用通用标签文本来区分不同的标记,而仅添加匹配的脚注。

有关使用通用标记的示例,请查看使用Chunk.setGenericTag(String)方法的示例,例如沙箱示例GenericFields

(我最初引用的是iText网站URL https://developers.itextpdf.com/examples/page-events-itext5/page-events-chunks,但是由于该网站的重组,它的位置不再明确;但是您仍然可以使用Wayback机器找到a copy of the original page。)< / em>