2013-07-25 8 views
2

Когда я пытаюсь преобразовать файл с укороченным кодом utf-8 в pdf с помощью Docverter (через API), я просто теряю символы, отличные от ASCII.Docverter теряет кодировку utf-8 при уценке -> pdf

Любое решение?

Я хочу конвертировать .md -> .pdf. Возможно, Docverter может помочь сделать .md -> .html, тогда я мог бы использовать другую библиотеку/службу для .html -> .pdf?

ответ

1

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.

Так что я в конечном итоге со следующим подходом:

  1. Использование Docverter для преобразования .md ->html
  2. процесса Результирующие html использовать HTML сущности вместо UTF-8
  3. Используйте 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.

+0

Спасибо! Кажется, это хорошее решение, я попробую. – lajarre

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

  • Нет связанных вопросов^_^