从Java中的特定位置提取文本

时间:2019-05-09 10:27:07

标签: java pdf itext7 text-extraction

我想从pdf中提取特定文本,我具有该文本的确切位置

我尝试使用itext7进行提取,但是当我使用正确的尺寸创建用于提取的矩形时,看起来太大了,无法匹配文本,但是尺寸正确了,我尝试了SimpleTextExtractionStrategy和 LocationTextExtractionStrategy相同的结果 pdfFile

private void estraiValori(PdfPage page) {
    for (Entry<String, Elemento> entry : templateMap.entrySet()) {
        String key = entry.getKey();
        Elemento value=(Elemento) entry.getValue();


        //Rectangle tmp=new Rectangle((float)238.64,(float) 14.8,(float) 122,(float) 28.7);   

            TextRegionEventFilter  fontFilter = new TextRegionEventFilter(value.getDim()); //getDim is a rectangle
            FilteredEventListener listener = new FilteredEventListener();
            //LocationTextExtractionStrategy extractionStrategy = listener.attachEventListener(new LocationTextExtractionStrategy(), fontFilter);
            SimpleTextExtractionStrategy  extractionStrategy = listener.attachEventListener(new SimpleTextExtractionStrategy(), fontFilter);
            new PdfCanvasProcessor(listener).processPageContent(page);//page is a PdfPage

            String actualText = extractionStrategy.getResultantText();
            System.out.println(actualText);



        }


    }

1 个答案:

答案 0 :(得分:0)

有多种方式(以视觉方式)显示PDF中的相同内容。您可以逐字形或在整个句子中附加文字字形。 TextRegionEventFilter不会在过滤之前将较大的文本块分割成较小的文本。如果文本是用大块书写的,而您只想要其中一部分,则原始内容需要进行预处理,即分成较小的块。

幸运的是,iText提供了一种开箱即用的方式来实现-该类称为GlyphTextEventListener,并且可以将其链接到其他ITextExtractionStrategy实例。只需按照以下方式将您的监听器包装到ITextExtractionStrategy中:

TextRegionEventFilter filter =  new TextRegionEventFilter(new Rectangle(x1, y1, x2, y2));
ITextExtractionStrategy filteredListener = new FilteredTextEventListener(new LocationTextExtractionStrategy(), filter);
ITextExtractionStrategy fineGrainedListener = new GlyphTextEventListener(filteredListener);

new PdfCanvasProcessor(fineGrainedListener).processPageContent(page);