用python的reportlab庫生成PDF報表

jopen 10年前發布 | 148K 次閱讀 Python Python開發

reportlab不是python的標準庫,它的強大之處在于能滿足絕大部分報表的需求形式,這篇文章將介紹reportlab中基本常用的api,使用canvas畫出一份整潔的PDF報表

前言

     reportlab不是python的標準庫,它的強大之處在于能滿足絕大部分報表的需求形式,這篇文章將介紹reportlab中基本常用的api,使用canvas畫出一份整潔的PDF報表。內容均來自reportlab的官方user guide

依賴與安裝

    首先,這里是官方的installation guide。reportlab目前應該只是支持到python2.7, py3的同學另想辦法吧。
    樓主的環境:fedora18 64bit

  • 安裝python2.7 or 2.6 or 2.5
  • PIL:如果你有圖片的操作需要這個庫,python imaging library ,下載地址。   
    $ tar xvfz Imaging-1.1.7.tar.gz
    $ cd Imaging-1.1.7
    $ python setup.py install
  • 官網上有提到其他的依賴包,如果需要的話可以自行測試,如Diagra。
  • reportlab的安裝,使用 easy_install reportlab 或者pip install reportlab就可以
  • 使用

    實例:

    別怪我再提一遍官方的user guide,文檔是很全的。
    我貼出下面的代碼來解釋基本的使用:

    # -*- coding: utf-8 -*- 
    #字體庫
    import reportlab.lib.fonts              
    #canvas畫圖的類庫
    from reportlab.pdfgen.canvas import Canvas  
    #用于定位的inch庫,inch將作為我們的高度寬度的單位
    from reportlab.lib.units import inch    
    
    
    if __name__ == "__main__":
        #聲明Canvas類對象,傳入的就是要生成的pdf文件名字
        can = Canvas('report.pdf')          
        pdf_head(can, "test for REPORTLAB!")
        #showpage將保留之前的操作內容之后新建一張空白頁
        can.showPage()                      
        #將所有的頁內容存到打開的pdf文件里面。
        can.save()                          
    
    
    def pdf_head(canvas, headtext):
        #setFont是字體設置的函數,第一個參數是類型,第二個是大小
        canvas.setFont("Helvetica-Bold", 11.5)  
        #向一張pdf頁面上寫string
        canvas.drawString(1*inch, 10.5*inch, headtext)  
        #畫一個矩形,并填充為黑色
        canvas.rect(1*inch, 10.3*inch, 6.5*inch, 0.12*inch,fill=1) 
        #畫一條直線
        canvas.line(1*inch, 10*inch, 7.5*inch, 10*inch)              

    另外:

  • showPage()使用后將重置之前字體之類的設置
  • inch作為量度單位是可以的,一張默認紙張的大小,將以最左下角作為(0,0)坐標點,正負為方向
  • 一張紙的高度大約12*inch,寬大約10*inch
  • 兩個坐標端點確定一條直線
  • 一條對角線的兩個端點坐標確定一個矩形
  • 設置顏色等其他api請參考官方文檔
  • 另外的另外:

  • 直接使用api實際是最麻煩的用法,是基礎用法。
  • 使用RML,HTML做報表,請參考這里

  • 效果截圖
    174851_a1zs_736230.png

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!