【发布时间】:2019-03-28 19:57:46
【问题描述】:
我正在使用 Itext 5.5,现在,我有一个 PdfPageEventHelper 的自定义实现,它向包含页码信息的页面添加页脚。
我的应用程序最近的更改导致存在必要的脚注。我创建 PDF 的方式(从组件列表动态创建)使得实际上无法确定哪个页面包含哪些项目,因为这是可自定义样式选项的一部分。
但是,我需要为脚注标记添加解释。
我现在的方法是简单地通知PdfPageEventHelper,在文档的某处,至少有一个元素需要(当前唯一的)脚注,然后我将解释性脚注添加到 every 页面。
这是我想避免的,因为未来可能会带来更多的脚注和解释。 所以问题是:
我可以直接解析当前页面内容并扫描标记文本的存在吗?或者还有其他方法可以查看当前页面是否需要解释性脚注?
到目前为止我失败的方法(全部在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
这似乎与我的问题基本相同。
【问题讨论】:
-
基本上你必须反过来做:只需在脚注标记块中添加一个通用标签。然后,您的页面事件侦听器会在页面的开头和结尾之间收到有关此通用标记的通知。因此,如果您在
onGenericTag中设置了一个标志,那么您的onEndPage方法只需检查(然后重置)该标志并相应地添加脚注。您甚至可以使用通用标签文本来区分不同的标记并仅添加匹配的脚注。见here。 -
您想添加它作为答案吗?因为这就像一个魅力 =) 非常感谢你
-
给你!我很高兴能帮上忙。