【问题标题】:trouble using xhtml2pdf with unicode使用带有 unicode 的 xhtml2pdf 遇到问题
【发布时间】:2011-05-02 02:49:52
【问题描述】:

我一直在尝试转换希伯来语 html 文件,但没有成功;无论我尝试什么编码,希伯来字符在输出 PDF 中显示为黑色矩形。

我尝试了 pisa 发行版中包含的一些 unicode 测试文件:pisa-3.0.33\test\test-unicode-all.html\test-bidirectional-text.html。无论有没有--encoding utf-8,我都从命令行运行了xhtml2pdf。结果相同:没有一个非拉丁字符通过。

这是字体问题*吗?如果 unicode 测试文件适合您,您是否进行了任何设置?

*FWIW,至少其中一些语言,包括希伯来语,应该可以使用 Arial。

编辑:或者,如果有人设置了 pisa 并且可以尝试转换上面的 unicode 测试文件,我将非常感激。

【问题讨论】:

  • HTML 保存的编码是什么?是 UTF-8 吗?
  • 是的。我还尝试使用 Windows-1255 HTML(在这种情况下使用了 --encoding windows-1255)。

标签: pdf unicode hebrew pisa


【解决方案1】:

将以下代码插入 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”中,你应该在你的操作系统中放置字体的绝对路径

【讨论】:

  • 请注意 url() 路径应该相对于您的项目根目录(根据我的经验)
【解决方案2】:

如果以后有人像我一样尝试弄清楚如何正确使用 xhtml2pdf 创建包含希伯来语的 PDF 文件,这对我有用:

  1. 第一件事:包括@eviltrue 在我的 HTML 中描述的字体设置。这可以是任何字体,只要它支持希伯来语字符,否则输入 HTML 中的任何希伯来语字符将在 PDF 中简单地显示为黑色矩形。

  2. 在撰写此答案时,虽然可以在 xhtml2pdf 中将希伯来字符输出为 PDF,但希伯来字符以相反的顺序输出,即 שלום כיתה א
    应该是א התיכ םולש

此时我被卡住了,但后来我偶然发现了这个 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

bidi 算法的好处是您可以在同一行中混合使用 RTL 和 LTR 语言(如上面的 HTML 示例中),并且仍然具有正确格式的结果。

编辑: 现在最好的方法肯定是使用wkhtmltopdf

【讨论】:

  • 如何使用 wkpdftohtml 添加目录?谢谢!
  • 你能帮帮我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
相关资源
最近更新 更多