iText在pdf

时间:2016-10-04 03:48:04

标签: java pdf itext

我正在创建一个实用程序,它将在现有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对象(或单个坐标)发送回原始解析方法。当然,我可以将值写入磁盘并在解析方法中读取它,但这看起来很糟糕。我非常确定有一种更优雅的方式来实现这一目标并且非常感谢指针。

0 个答案:

没有答案