Программно изменить цвет шрифта текста в PDF

Я вообще не знаком со спецификацией PDF. Мне было интересно, можно ли напрямую манипулировать файлом PDF, чтобы определенные блоки текста, которые я определил как важные, выделялись цветами по моему выбору. Языком выбора будет python.


person Community    schedule 15.08.2009    source источник


Ответы (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. файлы; он выполняет некоторую кластеризацию, чтобы попытаться восстановить текст в тех случаях, когда более простые библиотеки зашли бы в тупик.

Я не знаю существующей библиотеки, которая выполняет желаемые задачи преобразования, но должно быть возможно смешивать и сочетать некоторые из этих существующих, чтобы выполнить большую часть работы... удачи!

person Alex Martelli    schedule 16.08.2009
comment
Я пытался читать один pdf, но это какой-то символ и поток, я могу распознать PDF и EOF, и есть много специальных символов. есть какая-то конкретная кодировка? Не могли бы вы поделиться простым кодом для поиска BT и ET, у меня был тот же вопрос, что и на stackoverflow.com/questions/12982188/, спасибо - person Shan; 20.10.2012

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

person Learner    schedule 16.08.2009