Устранение проблем со шрифтом pdftotext

5624
karel

Я использую pdftotextдля создания ASCII-версию PDF-документа (сделанного с LaTeX), потому что соавторы предпочитают простой документ в MS Word.

Текстовая версия, которую я вижу, выглядит неплохо, но при ближайшем рассмотрении символ f кажется часто неправильно преобразованным в зависимости от того, какие символы следуют. Например, fi и fl часто становятся одним специальным символом, который я постараюсь вставить здесь: if и fl.

Каков наилучший способ очистить вывод pdftotext? Я думаю, что sedможет быть правильным инструментом, но я не уверен, как обнаружить эти специальные символы.

3
fl, fi, ff, ffl и ffi являются общими типографскими лигатурами, обычно заменяемыми одним символом (и определенно с TeX): http://en.wikipedia.org/wiki/Typographic_ligature#Computer_typesetting - возможно, вам просто нужно проверить что шрифт, в котором вы просматриваете вывод, имеет их, и что кодировка правильная. frabjous 13 лет назад 0
о, а вы имеете в виду `pdftotext` от poppler, верно, а не` pdftotex`? frabjous 13 лет назад 0
У вас есть оригинальный источник TeX? Почему бы не использовать, например, latex2rtf или oolatex (из TeX4ht) для создания файла текстового процессора для наркоманов Word? Компиляция в PDF, а затем преобразование в простой текст кажется очень странным путем для преобразования. frabjous 13 лет назад 0
Да, и если вы действительно хотите конвертировать PDF в обычный текст, рассмотрите возможность использования `ebook-convert` от калибра (http://calibre-ebook.com), а не` pdftotext`. Он позволяет выводить обычный текст (и множество других форматов) и обрабатывает лигатуры для вас. frabjous 13 лет назад 0
Я имел в виду pdftotex * t *. Опечатка исправлена. У меня есть оригинальный источник TeX, но latex2rtf и oolatex не работают так же хорошо, как pdftotext. Я использую дополнительные пакеты, такие как `siunitx` и` glossaries`, и поэтому кажется, что просмотр PDF - лучшее решение. Я бы хотел, чтобы был лучший способ. 13 лет назад 0
Спасибо за предложение `ebook-convert`, которое работает лучше, чем` pdftotext`. 13 лет назад 0

2 ответа на вопрос

3
davidg

По умолчанию pdftotextвыводит данные Unicode (UTF-8). Если ваш терминал или текстовый редактор не поддерживает UTF-8, то, как вы заметили, лигатуры, такие как «fi» и «fl» (которые могут быть представлены в Unicode как один символ), будут выглядеть странно.

Простое решение заключается в том, чтобы указать pdftotextвывод ASCII вместо юникода:

pdftotext -enc ASCII7 input.pdf output.txt 

Это должно привести к чистому выводу ASCII, избавляя вас от необходимости впоследствии очищать его вручную.

Благодарю. Я посчитал предложенное выше `ebook-convert 'лучшим. Ваш совет может улучшить поведение по умолчанию `pdfottext`, но я думаю, что мой терминал поддерживает UTF-8, и` ebook-convert`, кажется, лучше обрабатывает надстрочные индексы и другие вещи. 13 лет назад 0
это решение также не будет работать, если вам действительно нужны символы Юникода в выходных данных. amenthes 5 лет назад 0
1
frabjous

Предполагая, что вы работаете в какой-то системе на основе Unix, вы можете запустить это на выходе pdftotext:

sed -i -e 's/ffi/ffi/g' -e 's/fi/fi/g' -e 's/ff/ff/g' -e 's/fl/fl/g' -e 's/ffl/ffl/g' output.txt 

Это должно заменить лигатуры отдельными буквами, на которые они разбиваются. (См. Мои комментарии выше для того, что лигатуры имеют отношение к этому.)

Я проверил это на текстовом файле, сгенерированном pdftotextиз PDF- файла, созданного LaTeX. И это работало нормально. Но если LaTeX использовал нестандартную кодировку или шрифт с дополнительными лигатурами, возможно, еще многое предстоит сделать.

Возможно, вы захотите убедиться, что шрифт, который вы используете в своем терминале, содержит символы для лигатур серии f. DejaVu Sans Mono - хороший выбор.

Если ваш терминал не utf-8 (например, windows cmd.exe), вы также можете сделать это с помощью байтового представления: `sed -e 's / \\ xEF \\ xAC \\ x80 / ​​ff / g' - e 's / \\ xEF \\ xAC \\ x81 / fi / g' -e 's / \\ xEF \\ xAC \\ x82 / fl / g' -e 's / \\ xEF \\ xAC \\ x83 / ffi / g '-e' s / \\ xEF \\ xAC \\ x84 / ffl / g '-e' s / \\ xEF \\ xAC \\ x85 / ft / g '-e' s / \ \ XEF \\ XAC \\ x86 / й / g'`. amenthes 5 лет назад 0

Похожие вопросы