Я вообще не знаком со спецификацией PDF. Мне было интересно, можно ли напрямую манипулировать файлом PDF, чтобы определенные блоки текста, которые я определил как важные, выделялись цветами по моему выбору. Языком выбора будет python.
Программно изменить цвет шрифта текста в PDF
Ответы (2)
Это возможно, но не обязательно просто, потому что формат PDF очень богат. Вы можете найти документ с подробным описанием здесь. Первый элементарный пример, который он дает о том, как PDF-файлы отображают текст:
BT
/F13 12 Tf
288 720 Td
(ABC) Tj
ET
BT и ET — это команды для начала и окончания текстового объекта; Tf — это команда для использования внешнего ресурса шрифта F13 (который оказывается Helvetica) с размером 12; Td — команда установки курсора в заданные координаты; Tj — это команда для записи символов предыдущей строки. Аромат несколько похож на «обратно полированную нотацию» и действительно очень близок к вкусу Postscript, одного из других замечательных вкладов Adobe в набор текста.
Проблема в том, что в спецификациях PDF нет ничего, что говорило бы о том, что текст, который «выглядит» так, как будто он принадлежит друг другу на странице, как показано, должен на самом деле «быть» вместе; поскольку точные координаты всегда могут быть заданы, если PDF-файл создается сложной системой типографского макета, он может точно позиционировать текст, символ за символом, по координатам. Таким образом, реконструировать текст в виде слов и предложений не всегда просто — это почти так же сложно, как оптическое распознавание текста, за исключением того, что вам даются точные символы (ну, почти... некоторые предполагаемые «изображения» могут на самом деле отображаться как символы). ...;-).
pyPdf – это очень простая библиотека на чистом языке Python, которая является хорошей отправной точкой для экспериментов с PDF-файлами. Его функция «извлечение текста» довольно проста и не делает ничего, кроме объединения аргументов нескольких команд рисования текста; вы увидите, что этого достаточно для некоторых документов и совершенно непригодно для других, но, по крайней мере, это начало. В том виде, в котором он распространяется, pyPdf практически ничего не делает с цветами, но с некоторыми хакерами, которые можно исправить.
Мощная библиотека Python reportlab полностью ориентирована на создание новых PDF-файлов, а не на интерпретацию или изменение существующих. С другой стороны, чистая библиотека Python pdfminer полностью сосредоточена на анализе PDF. файлы; он выполняет некоторую кластеризацию, чтобы попытаться восстановить текст в тех случаях, когда более простые библиотеки зашли бы в тупик.
Я не знаю существующей библиотеки, которая выполняет желаемые задачи преобразования, но должно быть возможно смешивать и сочетать некоторые из этих существующих, чтобы выполнить большую часть работы... удачи!
Выделение возможно в файле PDF с использованием аннотаций PDF, но сделать это изначально не так просто. Если какая-либо из упомянутых библиотек предоставляет такое средство, вы можете искать.