PDF извлечение текста с использованием iText - PullRequest
9 голосов
/ 11 января 2012

Мы проводим исследования в области извлечения информации и хотели бы использовать iText.

Мы находимся в процессе изучения iText. Согласно литературе, которую мы рассмотрели, iText - лучший инструмент для использования. Можно ли извлечь текст из PDF в строке в iText? Я прочитал вопрос здесь в stackoverflow, связанный с моим, но он просто прочитал текст, чтобы не извлечь его. Может ли кто-нибудь помочь мне с моей проблемой? Спасибо.

Ответы [ 2 ]

17 голосов
/ 03 июля 2012

Как Теодор сказал, что вы можете извлекать текст из pdf, и как Крис указал

, если это действительно текст (не контуры или растровые изображения)

ЛучшеЧто нужно сделать, это купить книгу Бруно Лоуаги Itext в действии.Во втором издании глава 15 посвящена извлечению текста.

Но вы можете посмотреть на его сайте примеры.http://itextpdf.com/examples/iia.php?id=279

И вы можете разобрать его, чтобы создать простой текстовый файл.Вот пример кода:

/*
 * This class is part of the book "iText in Action - 2nd Edition"
 * written by Bruno Lowagie (ISBN: 9781935182610)
 * For more info, go to: http://itextpdf.com/examples/
 * This example only works with the AGPL version of iText.
 */

package part4.chapter15;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

public class ExtractPageContent {

    /** The original PDF that will be parsed. */
    public static final String PREFACE = "resources/pdfs/preface.pdf";
    /** The resulting text file. */
    public static final String RESULT = "results/part4/chapter15/preface.txt";

    /**
     * Parses a PDF to a plain text file.
     * @param pdf the original PDF
     * @param txt the resulting text
     * @throws IOException
     */
    public void parsePdf(String pdf, String txt) throws IOException {
        PdfReader reader = new PdfReader(pdf);
        PdfReaderContentParser parser = new PdfReaderContentParser(reader);
        PrintWriter out = new PrintWriter(new FileOutputStream(txt));
        TextExtractionStrategy strategy;
        for (int i = 1; i <= reader.getNumberOfPages(); i++) {
            strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
            out.println(strategy.getResultantText());
        }
        reader.close();
        out.flush();
        out.close();
    }

    /**
     * Main method.
     * @param    args    no arguments needed
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        new ExtractPageContent().parsePdf(PREFACE, RESULT);
    }
}

Обратите внимание на лицензию

Этот пример работает только с AGPL-версией iText.

Если вы посмотритев других примерах будет показано, как исключить части текста или как извлечь части PDF.

Надеюсь, это поможет.

3 голосов
/ 12 января 2012

iText позволяет вам сделать это, но нет никакой гарантии относительно гранулярности текстовых блоков, они зависят от реальных рендеров pdf, используемых при создании ваших документов.Письмо имеет собственный текстовый блок.И при этом они не должны быть в лексическом порядке, для надежных результатов вам, возможно, придется переупорядочивать текстовые блоки на основе их координат.Также вам, возможно, придется рассчитать, если вам нужно вставить пробелы между текстовыми блоками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...