Update (14/10/2013)
Проблема с логических опций в Docverter is now solved, поэтому теперь вы можете сделать прямое преобразование из md
в pdf
, передавая параметр ascii=true
в Docverter. Это приводит к тому, что промежуточный HTML использует сущности вместо utf-8, и, следовательно, полученный pdf-файл в порядке.
Оригинальный ответ
После долгих исследований (я также имел такую же проблему), я обнаружил, что ошибка находится в html-> преобразования в формате PDF, сделанные Docverter, которая использует библиотеки летающее блюдце. Это преобразование игнорирует любой символ не-ascii на входе HTML, даже если кодировка правильно установлена в utf-8
в тегах meta
.
Однако, если HTML содержит объекты, такие как ó
и т.д., то Летающие блюдца действительно включает эти символы, и предполагая, шрифт, который имеет правильную кодировку (по умолчанию шрифты, используемые библиотеки отлично), правильный символ (ó
в этот пример) показан в полученном pdf.
Так что я в конечном итоге со следующим подходом:
- Использование Docverter для преобразования
.md
->html
- процесса Результирующие
html
использовать HTML сущности вместо UTF-8
- Используйте Docverter снова конвертировать
.html
->.pdf
Шаг 2 прост, если вам посчастливилось использовать питон. В этом случае следующие строки делают трюк:
def fixHTML(filename):
f = open(filename, "r")
content = unicode(f.read(), "utf-8") # Reads the file into a unicode string
f.close()
f = open(filename, "w")
f.write(content.encode("ascii", "xmlcharrrefreplace")) # Writes with the fixed encoding
Примечание: Этот извилистый путь не требуется, потому что pandoc
принимает переключатель --ascii
который заставляет его производить HTML, как один, полученный на стадии 2. Однако , Парсер Docverter для логических опций seems to be broken, поэтому невозможно передать опцию ascii
в Docverter.
Спасибо! Кажется, это хорошее решение, я попробую. – lajarre