使用带有unicode的xhtml2pdf时出现问题

时间:2010-10-28 20:54:21

标签: pdf unicode hebrew pisa

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

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

这是字体问题*吗?如果unicode测试文件适合你,你有什么设置它吗?

* FWIW,至少其中一些语言,包括希伯来语,应与Arial合作。

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

如果将来有人像我一样试图找出如何正确使用xhtml2pdf创建包含希伯来语的PDF文件,这里有什么对我有用:

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

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

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