我正在创建一个实用程序,它将在现有PDF文档的最后一行文本下方添加一个多行文本字段。这将用于想要为从另一个系统生成的报表添加注释的人。
我按照iText书中的例子,也查看了这个问题:Get the exact Stringposition in PDF
所以现在我有一个解析文档最后一页的方法和一个自定义监听器,它找到我正在寻找的文本的坐标。
这是我的代码解析方法:
private void parsePdfPage2(String src, int pageNum) throws IOException {
PdfReader reader = new PdfReader(src);
RenderListener listener = new MyTextRenderListener();
PdfContentStreamProcessor processor = new PdfContentStreamProcessor(listener);
PdfDictionary pageDic = reader.getPageN(pageNum);
PdfDictionary resourcesDic = pageDic.getAsDict(PdfName.RESOURCES);
processor.processContent(ContentByteUtils.getContentBytesForPage(reader, pageNum), resourcesDic);
}
这是听众:
public class MyTextRenderListener implements RenderListener {
@Override
public void beginTextBlock() {}
@Override
public void endTextBlock() {}
@Override
public void renderImage(ImageRenderInfo renderInfo) {}
@Override
public void renderText(TextRenderInfo renderInfo) {
// Check if this is the text marker
String text = renderInfo.getText();
if (text.equalsIgnoreCase("Comments")) {
// Found it
LineSegment ls = renderInfo.getBaseline();
System.out.println("Found at X: " + ls.getBoundingRectange().getX() +
", Y: " + ls.getBoundingRectange().getY());
}
}
}
但是,现在我需要将找到的LineSegment对象(或单个坐标)发送回原始解析方法。当然,我可以将值写入磁盘并在解析方法中读取它,但这看起来很糟糕。我非常确定有一种更优雅的方式来实现这一目标并且非常感谢指针。