1. 程式人生 > 其它 >gridview 空資料 寬度_Python使用Reportlab處理PDF資料詳解第2部分

gridview 空資料 寬度_Python使用Reportlab處理PDF資料詳解第2部分

技術標籤:gridview 空資料 寬度

背景知識視訊教程

Reportlab Python完整教程Python PDF處理​viadean.com 29c5880f5182754e85c054e5779f13ad.png Python自動化Excel,Word,PDF,Web爬取等 - 國外課棧​viadean.com 31d22e7764727032403bef6a27652ac3.png Python:資料分析 - 國外課棧​viadean.com 776e40c79d0961f6ef8a8f777a4bfe26.png

將資料轉換為PDF

我們將嘗試通過ReportLab複製該文件的佈局。

您將建立的程式碼將支援基於XML資料檔案中的資料量生成多頁報告。 讓我們看看如何!

通常,客戶端會給您一個數據檔案以及他們希望您從該檔案生成的輸出。 有時,您將需要設計自己的規範以供客戶端使用,但我很少遇到這種情況。 接收資料檔案和報告時,要做的第一件事是確定各種資料在報告中的位置。 在這種情況下,這些片段將在XML標籤中,因此它們實際上將被標記。 這使事情變得容易得多,尤其是在XML具有良好標籤名稱的情況下。 固定寬度的資料檔案更加困難,因為它們沒有命名欄位,您可以一目瞭然。

一旦確定了現有文件中的所有內容,就可以開始建立一些程式碼了。 每個開發人員都是不同的。 您可以從此時開始為XML編寫解析器開始。 或者,您可以嘗試使用一些硬編碼的值來佈局文件。 解析器和佈局程式碼應該位於單獨的模組中,因此,首先完成哪種功能並不重要。

讓我們開始設計報告,方法是建立一個可以使用的基類。 我們將列出一些我們認為也將需要的方法。 將以下程式碼儲存到名為eob.py的檔案中:

from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.pdfgen import canvas
from reportlab.platypus import SimpleDocTemplate, Paragraph, Table
from reportlab.lib.units import inch, mm


class EOB:
  '''
    Explanation of Benefits PDF Class
    '''

  def __init__(self, pdf_file):
  ''''''
        self.canvas = canvas.Canvas(pdf_file, pagesize=letter)
        self.styles = getSampleStyleSheet()
        self.width, self.height = letter

  def coord(self, x, y, unit=1):
        x, y = x * unit, self.height -   y * unit
  return x, y

  def create_header(self):
  ''''''
  pass

  def create_payment_summary(self):
  ''''''
  pass

  def create_claims(self):
  ''''''
  pass

  def save(self):
  ''''''
        self.canvas.save()


def main(pdf_file):
  ''''''
    eob = EOB(pdf_file)
    eob.save()


if __name__ == '__main__':
    pdf_file = 'eob.pdf'
    main(pdf_file)

您會注意到,對於我們第一次嘗試生成(EOB)的過程,我們使用ReportLab的canvas模組。 您也可以從platypus開始,但為簡單起見,我們將從畫布開始,然後在需要時將其更新為使用platypus。 __init__方法是我們建立畫布例項的地方。 我們還建立一些類屬性來定義頁面的寬度和高度。 您還將注意到,我們建立了樣式表,將其用於設定段落的樣式。

我們建立的下一個方法稱為coord。 我們將使用此方法最終幫助我們在頁面上定位元素。

接下來,我們建立三個存根方法:create_header,create_payment_summary和create_claims。 這些方法現在不執行任何操作。 最後一種方法是我們的儲存方法,它僅將PDF儲存到磁碟。

最後,我們有main函式。 在這裡,我們建立EOB例項並告訴它儲存。 這段程式碼會生成一個空的PDF,這並不是很有趣。 因此,讓我們通過更新create_header方法使程式碼做一些有用的事情:

def create_header(self):
  ''''''
    ptext = '<font size=10><b>Statement Date: {}' 
  '</b></font>'.format('01/01/2017')
    p = Paragraph(ptext, self.styles['Normal'])
    p.wrapOn(self.canvas, self.width, self.height)
    p.drawOn(self.canvas, *self.coord(145, 17, mm))

    ptext = '''<font size=10>
    <b>Member:</b> {member}<br/>
    <b>Member ID:</b> {member_id}<br/>
    <b>Group #:</b> {group_num}<br/>
    <b>Group name:</b> {group_name}<br/>
    </font>
    '''.format(member='MIKE D',
               member_id='X123456',
               group_num=789456-1235,
               group_name='PYTHON CORP'
               )
    p = Paragraph(ptext, self.styles['Normal'])
    p.wrapOn(self.canvas, self.width, self.height)
    p.drawOn(self.canvas, *self.coord(145, 35, mm))

在這裡,我們建立一些格式化的文字並將其新增到在畫布上固定位置繪製的段落中。 然後,我們建立更多文字,將其新增到第二段中並進行繪製。 不要忘記更新main()方法來呼叫您的create_header方法:

def main(pdf_file):
  ''''''
    eob = EOB(pdf_file)
    eob.create_header()
    eob.save()

將此程式碼另存為eob2.py,然後執行指令碼。 如果一切正常,您應該得到一個如下所示的PDF:

將XML轉換為PDF

自定義頁首和頁尾

建立自定義PDF生成模組

PyPDF2包

pdfrw包

從PDF匯出資料

填充PDF可填寫表格

將標記轉換為PDF

PyFPDF軟體包

Python使用Reportlab處理PDF資料詳解第2部分​viadean.com