2013-08-28 7 views
0

Есть ли способ в Java, чтобы прочитать PDF по строкам и преобразовать его в текст? Раньше я использовал iTextPDFParser, но он читал по страницам, а не по строкам. Это имеет несколько недостатков. Дайте мне знать, есть ли способ читать PDF-файлы по строкам.Можно ли читать PDF по строкам?

+0

http://www.vogella.com/articles/JavaPDF/article.html –

+0

Спасибо, Бенджамин. Но PdfWriter writer = PdfWriter.getInstance (документ, новый FileOutputStream (OUTPUTFILE)); document.open(); PdfReader reader = новый PdfReader (INPUTFILE); int n = reader.getNumberOfPages(); Страница PdfImportedPage; // Перейдите по всем страницам Этот PDF-ридер читает PDF-страницу на странице, Can u pls предлагает мне читать по строкам в PDF-формате – user2725544

+0

http://www.quicklyjava.com/read-pdf-file-in-java-using -itext / –

ответ

3

Прежде чем вы начнете с этого вопроса, вы должны задать себе несколько более абстрактных вопросов. Первое: «Какая строка текста в документе?» Вы видите, проблема в том, что PDF представляет собой очень большой набор документов для печати (я не буду говорить все, но это довольно близко).

Текст размещается на странице при помощи нескольких операторов: Tj'TJ. Например, (a string) Tj помещает «строку» в текущем шрифте с текущими текстовыми преобразованиями (слово/char spacing/масштабирование, матрица преобразования) на странице. И даже это упрощено, поскольку 8-битные символы в строке могут интерпретироваться во всех видах в зависимости от кодировки, используемой для этого экземпляра шрифта.

Итак, давайте посмотрим на это так: если вы поместите текст на страницу в строках, генерирующее приложение может очень хорошо использовать оператор ', который перемещается на следующую строку и помещает строку текста. Это здорово, извлечение строк за строкой легко. Если приложение решает разместить весь текст на странице, а затем весь текст курсив, а затем весь жирный текст (я смотрю на вы troff), то вы не получите вещи в ожидаемом порядке. Фактически приложение может размещать текст на странице в любом возможном порядке, который вы хотите.

ОК, вы говорите, просто возьмите текст и отсортируйте его в порядке чтения. Это легко. Вы получаете ограничивающие поля для каждого фрагмента текста и делаете вид сверху вниз слева направо. Как насчет столбцов? Как насчет вставных коробок? Как насчет small caps или начального drop caps? А как насчет суб и надстрочного? Что относительно текста на карте, которая следует за контурами дороги или реки? Что порядок чтения в любом случае? Что, если текст - это кандзи? Что, если это смесь кандзи и английского? Что, если это иврит с цифрами? Как насчет ligatures? Где границы слов в любом случае? Что, если слово было помещено глифом за раз? Как я узнаю, когда глиф является частью слова, и я должен вставить пробел? Что делать, если на странице не было мест? Как насчет discretionary hyphens?

Это дает вам представление о масштабах проблемы и вещах, которые вам необходимо учитывать при интерпретации вывода типичного извлечения текста. Большинство инструментов для извлечения PDF-текста выходят за рамки текста, отменяя кодировку, отжигая слова и сортируя их.

Я работал над инструментами для извлечения текста в Acrobat 1.0 и 2.0, и мы ударили практически обо всем в этом списке. У нас был один инженер/исследователь, работающий полный рабочий день по коду извлечения текста в продукте 2.0, и он начал работать в середине продукта 1.0 - это близко к двум годам, чтобы получить это право (ish).

Итак, вы хотите, чтобы линия за строкой? Засучи рукава.

Смежные вопросы