Извлечь текст из конкретной позиции в Java - PullRequest
0 голосов
/ 09 мая 2019

Я хочу извлечь конкретный текст из 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 голосов
/ 09 мая 2019

Есть несколько способов показать (визуально) один и тот же контент в 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...