【问题标题】:Is it possible to add a footnote depending on the page contents when using itext?使用itext时是否可以根据页面内容添加脚注?
【发布时间】: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
  • 您想添加它作为答案吗?因为这就像一个魅力 =) 非常感谢你
  • 给你!我很高兴能帮上忙。

标签: java itext


【解决方案1】:

基本上你必须反过来做:

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

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

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

(我最初引用了 iText 站点 URL https://developers.itextpdf.com/examples/page-events-itext5/page-events-chunks,但由于该站点的重组,它不再指向特定的地方;但您仍然可以使用回溯机器找到 a copy of the original page。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2012-11-08
    • 2022-01-05
    • 2021-01-07
    • 2015-06-04
    相关资源
    最近更新 更多