PDFBox 2.0:提取文本

时间:2018-02-10 18:20:50

标签: java pdf pdfbox

使用PDFBox 2.0.8和解决方案,提供here我试图仅提取页面上可见的文本。 PdfTextStripper的基本功能返回所有可用的文本,尽管它在页面上确实不可见,这是一个非常大的问题,所以要摆脱它,我们需要从PageDrawer复制粘贴很多代码并考虑这些剪辑路径来决定如果我们应该画出特定的角色。 但是,在某些文件中(如here),某些单词中的第一个字母总是开箱即用(在链接文件中,请参阅"租户" - " T"丢失,&#34 ;月租" - " R"失踪,"宠物租" - " R")执行此检查时:

@Override
protected void processTextPosition(TextPosition text) {
    Matrix textMatrix = text.getTextMatrix();
    Vector start = textMatrix.transform(new Vector(0, 0));
    PDGraphicsState gs = getGraphicsState();
    Area area = gs.getCurrentClippingPath();
    if (area == null || area.contains(lowerLeftX + start.getX(), lowerLeftY + start.getY()))
        super.processTextPosition(text);
}

这始终只是令牌丢失的第一个字符,我认为哪些可能是重要的大写字母。 所以似乎有一些更奇怪的转变。有人看到过这个问题吗?那些转换是在原始类中进行的? 非常感谢!

1 个答案:

答案 0 :(得分:0)

这里的一个可能的解决方案是检查角色的中间(不是开始)是否没有开箱即用,如:

@Override
protected void processTextPosition(TextPosition text) {
    Matrix textMatrix = text.getTextMatrix();
    Vector start = textMatrix.transform(new Vector(0, 0));
    Vector middle = new Vector(start.getX() + text.getWidth()/2, start.getY());
    PDGraphicsState gs = getGraphicsState();
    Area area = gs.getCurrentClippingPath();
    if (area == null || area.contains(lowerLeftX + middle.getX(), lowerLeftY + middle.getY()))
        super.processTextPosition(text);
}