使用iTextSharp在PDF页面上查找最后一个对象

时间:2014-01-15 17:13:54

标签: itextsharp

如何在PDF页面上找到最后一个对象的位置和高度?没有页脚。我想在最后一项下方标记模板。不在页脚中,而是直接在最后一行文本下方。文本的数量可能会有所不同,所以我需要计算页面底部是否有足够的空间来插入我的模板。

感谢您的帮助, 亚伦

1 个答案:

答案 0 :(得分:1)

要确定给定页面上的文本和(位图)图像的结束位置,请查看动作中的iText,第2版示例ShowTextMargins,它解析PDF并添加显示文本的矩形和(位图)图像边缘。

    PdfReader reader = new PdfReader(src);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
    TextMarginFinder finder;
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        finder = parser.processContent(i, new TextMarginFinder());
        PdfContentByte cb = stamper.getOverContent(i);
        cb.rectangle(finder.getLlx(), finder.getLly(),
            finder.getWidth(), finder.getHeight());
        cb.stroke();
    }
    stamper.close();
    reader.close();

请注意,此机制忽略矢量图形(通常也用于加下划线的文本,彩色背景和装饰性分隔线),因为底层的iText解析器包仍然存在(截至iText版本5.4) .5)忽略它们。

更新:从版本5.5.6开始,iText扩展了解析器包,还包括矢量图解析。这允许扩展原始TextMarginFinder类,实现this answer中提供的新ExtRenderListener方法,从而产生类似的类MarginFinder,它不仅考虑文本,还考虑其他一种内容,例如位图图像和矢量图形。