Получить шрифт каждой строки с помощью PDFBox

Есть ли способ получить шрифт каждой строки PDF-файла с помощью PDFBox? Я пробовал это, но он просто перечисляет все шрифты, используемые на этой странице. Он не показывает, какая строка или текст отображается в этом шрифте.

List pages = doc.getDocumentCatalog().getAllPages(); for(PDPage page:pages) { Map pageFonts=page.getResources().getFonts(); for(String key : pageFonts.keySet()) { System.out.println(key+" - "+pageFonts.get(key)); System.out.println(pageFonts.get(key).getBaseFont()); } } 

Любой вход оценивается. Благодаря!

Всякий раз, когда вы пытаетесь извлечь текст (простой или с информацией о стилизации) из PDF с помощью PDFBox, вам обычно следует начать использовать class PDFTextStripper или один из его родственников. Этот class уже выполняет весь тяжелый подъем, связанный с анализом содержимого PDF.

Вы используете простой class PDFTextStripper следующим образом:

 PDDocument document = ...; PDFTextStripper stripper = new PDFTextStripper(); // set stripper start and end page or bookmark attributes unless you want all the text String text = stripper.getText(document); 

Это возвращает просто обычный текст, например, из некоторой формы R40:

 Claim for repayment of tax deducted from savings and investments How to fill in this form Please fill in this form with details of your income for the above tax year. The enclosed Notes will help you (but there is not a note for every box on the form). If you need more help with anything on this form, please phone us on the number shown above. If you are not a UK resident, do not use this form – please contact us. Please do not send us any personal records, or tax certificates or vouchers with your form. We will contact you if we need these. Please allow four weeks before contacting us about your repayment. We will pay you as quickly as possible. Use black ink and capital letters Cross out any mistakes and write the correct information below ... 

С другой стороны, вы можете перезаписать свой метод writeString(String, List) и обработать больше информации, чем простой текст. Чтобы добавить информацию о названии используемого шрифта, где бы ни был изменен шрифт, вы можете использовать это:

 PDFTextStripper stripper = new PDFTextStripper() { String prevBaseFont = ""; protected void writeString(String text, List textPositions) throws IOException { StringBuilder builder = new StringBuilder(); for (TextPosition position : textPositions) { String baseFont = position.getFont().getBaseFont(); if (baseFont != null && !baseFont.equals(prevBaseFont)) { builder.append('[').append(baseFont).append(']'); prevBaseFont = baseFont; } builder.append(position.getCharacter()); } writeString(builder.toString()); } }; 

Для той же формы, которую вы получаете

 [DHSLTQ+IRModena-Bold]Claim for repayment of tax deducted from savings and investments How to fill in this form [OIALXD+IRModena-Regular]Please fill in this form with details of your income for the above tax year. The enclosed Notes will help you (but there is not a note for every box on the form). If you need more help with anything on this form, please phone us on the number shown above. If you are not a UK resident, do not use this form – please contact us. [DHSLTQ+IRModena-Bold]Please do not send us any personal records, or tax certificates or vouchers with your form. We will contact you if we need these. [OIALXD+IRModena-Regular]Please allow four weeks before contacting us about your repayment. We will pay you as quickly as possible. Use black ink and capital letters Cross out any mistakes and write the correct information below ... 

Если вы не хотите, чтобы информация о шрифтах была объединена с текстом, просто создайте отдельные структуры в своем методе перезаписи.

TextPosition предлагает гораздо больше информации об fragmentе текста, который он представляет. Осмотрите его!

Чтобы добавить ответ mkl, если вы используете pdfbox 2.0.8:

  • Используйте position.getFont().getName() вместо position.getFont().getBaseFont()
  • Используйте position.getUnicode() вместо position.getCharacter()

Более подробную информацию о PDFont и текстовой позиции можно найти в их Javadocs в Интернете.

  • Есть ли в Google Chrome «сглаживание шрифтов»?
  • Android - Использование пользовательского шрифта
  • При экспорте отчета в PDF смените шрифт
  • Ярлык для изменения размера шрифта в Eclipse?
  • Нестандартные шрифты в Интернете?
  • Как добавить внешние шрифты в приложение для Android
  • Шрифты выглядят по-разному в Firefox и Chrome
  • Rails: использование шрифта Awesome
  • android - установить шрифт на платформу Android без root
  • Android: хотите установить пользовательские шрифты для всего приложения, а не для исполнения
  • Размытие шрифтов WPF-Решения
  • Interesting Posts

    Любые предложения о том, как я могу построить данные типа mixEM с помощью ggplot2

    Терминал Vs. Shell

    Какие frameworks модульного тестирования доступны для F #

    Почему значок конверта панели задач Outlook иногда остается активным, даже если у меня нет непрочитанного письма?

    Отключить кнопку сохранения в Adobe PDF Reader и скрыть панель меню в окне IE

    Как безопасно хранить информацию о строках соединения в VBA

    Блокирование объявлений ISP, появившихся после возможного захвата DNS и перенаправления через порт 53?

    Конфликт перегруженных методов с дополнительными параметрами

    Что такое 0x10 в инструкции по сборке «leal 0x10 (% ebx),% eax» x86?

    Как избежать строки в Java?

    Puzzling Enumerable.Cast InvalidCastException

    WiFi-карта не была обнаружена Windows впервые после перезапуска с Ubuntu в режиме двойной загрузки

    Как создать журнал действий robocopy и сохранить в текстовом файле с сегодняшней датой?

    Плюсы и минусы SQLite и общих настроек

    Очистите диск по ошибке с помощью diskpart. Возможно ли восстановить данные, хранящиеся в конкретном разделе?

    Давайте будем гением компьютера.