【发布时间】:2013-08-23 02:16:24
【问题描述】:
我的 html 页面中使用了 unicode,它在 html 页面中正确显示。但是在使用 xhtml2pdf 将其转换为 html 时,它会在 unicodes 中生成黑色的实心方框。除了 UTF-8 设置之外,还有一些 unicode 设置。我不认为它的unicode问题。
# convert HTML to PDF
pisaStatus = pisa.CreatePDF(
StringIO(sourceHtml.encode('utf-8')),
dest=resultFile)
完整的py代码:
# -*- coding: utf-8 -*-
from xhtml2pdf import pisa
from StringIO import StringIO
source = """<html>
<style>
@font-face {
font-family: Preeti;
src: url("preeti.ttf");
}
body {
font-family: Preeti;
}
</style>
<body>
This is a test <br/>
सरल
</body>
</html>"""
# Utility function
def convertHtmlToPdf(source):
# open output file for writing (truncated binary)
pdf = StringIO()
pisaStatus = pisa.CreatePDF(StringIO(source.encode('utf-8')), pdf)
# return True on success and False on errors
print "Success: ", pisaStatus.err
return pdf
# Main program
if __name__=="__main__":
print pisa.showLogging()
pdf = convertHtmlToPdf(source)
fd = open("test.pdf", "w+b")
fd.write(pdf.getvalue())
fd.close()
我什至需要包含字体吗??
【问题讨论】:
-
sourceHtml实际上是一个unicode字符串吗?因为通常情况下,HTML 文件采用某种 8 位编码,并且在已经是 UTF-8(或者更糟的是 Latin-1 之类的东西)的str上调用encode('utf-8')不会有帮助。 -
是的,它们在sourceHtml中是这样的,u093e\u0917\u093f \u0924\u092f\u093e\u0930:
\n\t\t\n \n\t \t\t\n\t\t\t\t\u090 9\u092a\u092d\u094b\u0915\u094d\u0924\u093e \u092a\u0942\u0930\u094d\u0923\u092a\u094d\u092f\u093e\ u0915\u0947\u091c\u0915\u094b \u0932\u093e\u0917\u093f \u0924\u092f\u093e\u0930 :
\n\t\t\t\n
标签: python unicode flask xhtml2pdf