pisa默认是不支持中文的,如果要解决中文乱码,可以做一下操作:
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
pdfmetrics.registerFont(TTFont('yh', '%s/static/font/msyh.ttf' % settings.PROJECT_PATH))
from xhtml2pdf.default import DEFAULT_FONT
DEFAULT_FONT['helvetica'] = 'yh'
只要在pisa.CreatePDF()之前添加以上代码就可以了,当然encoding='UTF-8'还需要设置
demo:
# encoding: utf-8 from xhtml2pdf import pisa from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from xhtml2pdf.default import DEFAULT_FONT pdfmetrics.registerFont(TTFont('yh', 'msyh.ttf')) DEFAULT_FONT['helvetica'] = 'yh' sourceHtml = "<html><body><p>To <br>PDF 中文测试</p></body></html>" outputFilename = "test.pdf" # Utility function def convertHtmlToPdf(sourceHtml, outputFilename): # open output file for writing (truncated binary) resultFile = open(outputFilename, "w+b") # convert HTML to PDF pisaStatus = pisa.CreatePDF( sourceHtml, # the HTML to convert dest=resultFile) # file handle to recieve result # close output file resultFile.close() # close output file # return True on success and False on errors return pisaStatus.err # Main program if __name__ == "__main__": pisa.showLogging() convertHtmlToPdf(sourceHtml, outputFilename)
附带msyh.ttf下载地址:
http://pan.baidu.com/s/1qXKvofE