Получить шрифт каждой строки с помощью 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 в Интернете.

  • Правильный MIME-тип для .woff2-шрифтов
  • Как добавить несколько файлов шрифтов для одного и того же шрифта?
  • Размытие шрифтов WPF-Решения
  • android - установить шрифт на платформу Android без root
  • Принудительное сглаживание с использованием css: Это миф?
  • Есть ли способ программно определить, имеет ли файл шрифта определенный Unicode Glyph?
  • Что означает сокращение косой черты в сокращении шрифтов CSS?
  • Как вставить шрифт с помощью моего приложения на C #? (с использованием Visual Studio 2005)
  • Как импортировать веб-шрифт Google в файл CSS?
  • Использование пользовательского шрифта в android TextView с помощью xml
  • Как разместить веб-шрифты google на моем собственном сервере?
  • Interesting Posts

    Определите, работает ли на корневом устройстве

    локальная переменная, инициализированная нулем в C

    Какова наилучшая практика для парсинга удаленного контента с помощью jQuery?

    событие Действие против события EventHandler

    Установка времени разработки DataContext в окне дает ошибку компилятора?

    Отключить от доли samba

    Автоматическая установка аддонов с помощью Firefox

    WaitAll для нескольких дескрипторов в streamе STA не поддерживается

    Как открыть или имитировать щелчок на андроиде Предпочтение, созданное с помощью XML, программно?

    Что рекомендуется для нереста streamов из сервлета в Tomcat

    Найти экран входа в систему для продолжения загрузки на рабочем столе в фоновом режиме

    Какова основная цель annotations @SerializedName в андроиде с помощью GSon

    MVC Razor рассматривает вложенную модель foreach

    Определения функций C / C ++ без сборки

    Индекс Solr против сохраненного

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