2017-01-19 5 views
0

Я пытаюсь прочитать текст из файла PDF, а затем позже написать тот же текст обратно в другой PDF, используя Python. После того, как текст читается, представление строки, когда я распечатать его на консоли:Чтение и запись PDF-файлов с лигатурами?

Officially, it’s called 

Однако, когда я напечатать repr() этой текстовой строки, я вижу:

O\xef\xac\x83cially, it\xe2\x80\x99s called 

Это имеет для меня большой смысл - это лигатуры символов из PDF-файлов, то есть \ xef \ xac \ x83 представляет собой лигатуру для ff. Проблема заключается в том, что, когда я пишу эту строку в формат PDF, используя ReportLab библиотеки, ПРВ черных символов на месте, как показано ниже:

enter image description here

Это происходит только с определенными лигатурами. Мне интересно, что я могу сделать, чтобы строка, которую я пишу в PDF, не содержит этих лигатур или если есть эффективный способ заменить все из них.

+1

Какой шрифт вы здесь используете? Имеет ли он лигатуру 'ffi'? – usr2564301

ответ

0

Похоже, ваш вход правильный, но чтобы увидеть символ в вашем выводах, используйте шрифт, который имеет его. Шрифт, который вы используете здесь, представляет собой болотный стандарт Arial, который его не содержит.

Некоторые предложения (главным образом, в зависимости от платформы, но некоторые из них являются Open Source):

  • Arial Unicode MS
  • Lucida Grande
  • Calibri
  • Cambria
  • Кронштейны
  • Droid Sans/Droid Serif
  • Helvetica Neue
  • Ubuntu

Если вы не хотите, или не в состоянии, чтобы изменить шрифт, заменить последовательность \xef\xac\x83 с простыми символами ffi в вашей программе, прежде чем писать текст в формате PDF. (И аналогичные для тех других определенных лигатур, о которых вы упомянули.)

0

Что я в итоге сделал, это копирование символов из моего текстового файла и создание на них .replace. т.е. str.replace ('ff', 'ff') - если это выглядит одинаково, то одно и то же. Параметр слева - это символ лигатуры, а парам справа - два. Также не забудьте # - - кодировка: utf-8 - -.

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