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

标签 java itext

我正在使用 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/

相关文章:

Java 使用 TransactionManager 实现两阶段提交

java - @ConfigurationProperties 不使用 PropertySourcesPlaceholderConfigurer

java - android:获取当前收到的消息

java - 根据文件大小将一个 Pdf 文件拆分为多个

asp.net - iTextSharp HTML 到 PDF 转换

java - 如何原子运行 2 SQL "SELECT"s?或者在我处理它们之前获取行数的任何其他更好的方法

java - 我无法使用 apache POI 从 selenium 中的 xlsx 工作表中读取空白单元格。(PS : I want to skip blank rows)

java - 使用itext pdf缺少pdf上的彩色区域

c# - 如何使用 iTextSharp 保留 CSS?

java - IText - BarcodeQRCode 使背景颜色透明