水真香 / python / 在python中使用pisa生成pdf对中文的处理:

分享

   

在python中使用pisa生成pdf对中文的处理:

2013-02-04  水真香

由于pisa默认不支持中文,需要添加对中文字符的hack。

## Hack for Chinese fonts ############################
import reportlab.rl_config
reportlab.rl_config.warnOnMissingFontGlyphs = 0
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas
pdfmetrics.registerFont(TTFont('song', 'C:/WINDOWS/Fonts/wqy-zenhei.ttf'))
from reportlab.lib import fonts
fonts.ps2tt = lambda psfn: ('song', 0, 0)
fonts.tt2ps = lambda fn,b,i: 'song'

import reportlab.platypus
def wrap(self, availWidth, availHeight):
    # work out widths array for breaking
    self.width = availWidth
    leftIndent = self.style.leftIndent
    first_line_width = availWidth - (leftIndent+self.style.firstLineIndent) -
self.style.rightIndent
    later_widths = availWidth - leftIndent - self.style.rightIndent
    try:
        self.blPara = self.breakLinesCJK([first_line_width, later_widths])
    except:
        #print 'breakLinesCJK except:',self, availWidth, availHeight
        self.blPara = self.breakLines([first_line_width, later_widths])
    self.height = len(self.blPara.lines) * self.style.leading
    return (self.width, self.height)

reportlab.platypus.Paragraph.wrap = wrap

import sys
reload(sys)
sys.setdefaultencoding('utf8')
########################################################


这段代码可以随便放在任何调用pisa CreatePDF()方法前。 如放在pisa lib(sx\pisa3)下的 __init__.py
中。或者可以自己定义一个新的module,在需要处理中文的地方引入这个module即可。

但是这样还不够, 另外需要对处理的HTML设置meta字符编码 - <meta http-equiv="Content-Type"
content="text/html; charset=utf-8">,或者在调用CreatePDF()方法中设置encoding参数才可以解决乱码问题。

参考: http://wiki.woodpecker.org.cn/moin/MiscItems/2008-08-08

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>