我正在使用 Itext 5.5,现在,我有一个 PdfPageEventHelper
的自定义实现,它将页脚添加到包含页码信息的页面。
我的申请中最近的更改导致了必要的脚注的存在。我创建 PDF 的方式(从组件列表动态创建)实际上无法确定哪个页面包含哪些项目,因为这是可自定义样式选项的一部分。
但是,我需要为脚注标记添加解释。
我现在采用的方法是简单地通知 PdfPageEventHelper
在文档中的某处,至少有一个元素需要(当前唯一)脚注,然后我将解释性脚注添加到 每页。
这是我想避免的,因为 future 可能会带来更多的脚注和解释。 所以问题是:
我可以直接解析当前页面内容并扫描是否存在标记文本吗?或者是否有另一种方法来查看当前页面是否需要解释性脚注?
到目前为止我失败的方法(全部在 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
这似乎基本上与我的问题完全相同。
最佳答案
本质上你必须以相反的方式来做:
只需将通用标记添加到脚注标记的 block 中即可。然后,您的页面事件监听器会收到有关页面开头和结尾之间的通用标记的通知。因此,如果您在 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。)
关于java - 使用itext时是否可以根据页面内容添加脚注?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52491984/