проблема с использованием xhtml2pdf с юникодом

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

Я попробовал несколько тестовых файлов Unicode, включенных в дистрибутив pisa: pisa-3.0.33\test\test-unicode-all.html и \test-bidirectional-text.html. Я запускал xhtml2pdf из командной строки как с --encoding utf-8, так и без него. Тот же результат: ни один из нелатинских символов не прошел.

Это проблема шрифтов *? Если тестовый файл Unicode вам подходит, вы что-нибудь делали для его настройки?

* FWIW, по крайней мере, некоторые из этих языков, включая иврит, должны работать с Arial.

РЕДАКТИРОВАТЬ: В качестве альтернативы, если кто-то настроил pisa и может попробовать преобразовать тестовый файл Unicode выше, я был бы очень благодарен.


person user490616    schedule 28.10.2010    source источник
comment
В какой кодировке сохраняется HTML? это UTF-8?   -  person Eran Galperin    schedule 29.10.2010
comment
Ага. Я также пробовал использовать Windows-1255 HTML (и в этом случае использовал --encoding windows-1255).   -  person user490616    schedule 29.10.2010


Ответы (2)


Мне помогла вставка следующего кода в html

<style>
@page {
size: a4;
margin: 0.5cm;
}

@font-face {
font-family: "Verdana";
src: url("verdana.ttf");
}

html {
font-family: Verdana;
font-size: 11pt;
}

</style>

в url вместо "verdana.ttf" вы должны указать абсолютный путь к шрифту в вашей операционной системе.

person eviltrue    schedule 29.01.2011
comment
обратите внимание, что путь url () должен быть относительно корня вашего проекта (по моему опыту) - person Steve Jalim; 27.01.2012

Если кто-то в будущем попытается, как и я, выяснить, как НАПРАВИЛЬНО создать файл PDF, содержащий иврит, с помощью xhtml2pdf, вот что сработало для меня:

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

  2. На момент написания этого ответа, хотя можно выводить символы иврита в PDF в xhtml2pdf, символы иврита выводятся в обратном порядке, то есть שלום כיתה א
    будет א התיכ םולש.

На этом этапе я застрял, но затем я наткнулся на это SO asnwer: https://stackoverflow.com/a/15449145/1918837 < / а>

После установки пакета python-bidi вот пример полного решения (используется в приложении на Python):

from bidi import algorithm as bidialg
from xhtml2pdf import pisa

HTMLINPUT = """
            <!DOCTYPE html>
            <html>
            <head>
               <meta http-equiv="content-type" content="text/html; charset=utf-8">
               <style>
                  @page {
                      size: a4;
                      margin: 1cm;
                  }

                  @font-face {
                      font-family: DejaVu;
                      src: url(my_fonts_dir/DejaVuSans.ttf);
                  }

                  html {
                      font-family: DejaVu;
                      font-size: 11pt;
                  }
               </style>
            </head>
            <body>
               <div>Something in English - משהו בעברית</div>
            </body>
            </html>
            """

pdf = pisa.CreatePDF(bidialg.get_display(HTMLINPUT, base_dir="L"), outpufile)

# I'm using base_dir="L" so that "< >" signs in HTML tags wouldn't be
flipped by the bidi algorithm

Преимущество алгоритма двунаправленного текста в том, что вы можете смешивать языки RTL и LTR в одной строке (как в примере HTML выше) и при этом получать правильно отформатированный результат.

РЕДАКТИРОВАТЬ: лучший способ сейчас определенно использовать wkhtmltopdf.

person OrPo    schedule 03.03.2014