Python生成pdf問題解決總結

1,生成pdf時的中文及自動換行問題:html

pdfmetrics.registerFont(TTFont('song', settings.MEDIA_ROOT+'/file/SURSONG.TTF'))
from reportlab.lib import fonts
from django.template import Context, loader 
fonts.ps2tt = lambda psfn: ('song', 0, 0)
fonts.tt2ps = lambda fn,b,i: 'song'
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:
        self.blPara = self.breakLines([first_line_width, later_widths])
    self.height = len(self.blPara.lines) * self.style.leading
    return (self.width, self.height)

中文問題主要是經過設置本身的字體來規定pdf的字體,具體的能夠看reportlab庫裏的介紹和例子;換行問題是經過重寫reportlab裏的warp方法來實現,用html生成的pdf,用的是pisa的第三方插件,在解決換行問題後,在表格裏文字居中的問題就會出現,有2種方法能夠操做:python

       1,在重寫warp方法時參照reportlab裏的方法更改邊距來實現,但有個缺點,在表格內字數多時會出現文字大小不一的狀況django

       2,在html裏設置標籤格式,以此來達到居中的效果,這種沒有什麼太大缺點,操做也很方即可以做爲首選字體

插入圖片:插件

       再插入圖片時,只有用圖片的絕對路徑(具體位置)才能夠將圖片插入到pdf中正常顯示。例如:settings.MEDIA_ROOT+'/images/test.jpg',code