简体   繁体   English

使用 FPDF 为 dataframe 中的每条记录添加 pdf 页面

[英]Adding pdf page for each record in dataframe using FPDF

I trying to iterate through pandas table and add PDF page for each row using FPDF library.我尝试遍历 pandas 表并使用 FPDF 库为每一行添加 PDF 页面。 The script only adds the very last record in the table and generates one page.该脚本仅添加表中的最后一条记录并生成一页。 I'm trying to figure out how to add a page for each record我试图弄清楚如何为每条记录添加一个页面

import pandas as pd
from fpdf import FPDF
filename = 'alley.csv'
df= pd.read_csv(filename)

class PdfReport:
    def __init__(self, filename):
        self.filename = filename


    def generate(self, first_name,last_name, address_lane,city,zip_code, amount):
        pdf = FPDF(orientation='P', unit='pt', format='A4')
        pdf.add_page([])

        pdf.set_font(family="Times", size=24, style='B')
        pdf.cell(w=0, h=80, txt="Report Header", border=1, align="C", ln=1)
        pdf.cell(w=0, h=40, txt="Year: 2021 ", border=1,ln=1)
        pdf.cell(w=0, h=40, txt=first_name, border=1, ln=1)
        pdf.cell(w=0, h=40, txt=last_name, border=1, ln=1)
        pdf.cell(w=0, h=40, txt=address_lane, border=1, ln=1)
        pdf.cell(w=0, h=40, txt=city, border=1, ln=1)
        pdf.cell(w=0, h=40, txt=str(zip_code), border=1, ln=1)
        pdf.cell(w=0, h=40, txt=str(amount), border=1, ln=1)
        pdf.output(self.filename)

for ind in df.index:
    pdf_report= PdfReport(filename="Report1.pdf")
    pdf_report.generate(df['first_name'][ind], df['last_name'][ind], df['address_lane'][ind], df['city'][ind], df['zip_code'][ind],df['amount'][ind])

You can achieve that with a few edits made to your code.您可以通过对代码进行一些编辑来实现这一点。

import pandas as pd
from fpdf import FPDF
filename = './alley.csv'
df = pd.read_csv(filename)

class PdfReport(FPDF):
    def __init__(self, filename):
        FPDF.__init__(self) #initializes parent class
        self.filename = filename

    def generate(self, first_name,last_name, address_lane,city,zip_code, amount):
        pdf.add_page()
        pdf.set_font(family="Times", size=24, style='B')
        pdf.cell(w=0, h=80, txt="Report Header", border=1, align="C", ln=1)
        pdf.cell(w=0, h=40, txt="Year: 2021 ", border=1,ln=1)
        pdf.cell(w=0, h=40, txt=first_name, border=1, ln=1)
        pdf.cell(w=0, h=40, txt=last_name, border=1, ln=1)
        pdf.cell(w=0, h=40, txt=address_lane, border=1, ln=1)
        pdf.cell(w=0, h=40, txt=city, border=1, ln=1)
        pdf.cell(w=0, h=40, txt=str(zip_code), border=1, ln=1)
        pdf.cell(w=0, h=40, txt=str(amount), border=1, ln=1)

pdf = PdfReport(filename)
pdf.alias_nb_pages()

for ind in df.index:
    pdf.generate(df['first_name'][ind], df['last_name'][ind], df['address_lane'][ind], df['city'][ind], df['zip_code'][ind],df['amount'][ind])

pdf.output('PDF_TEST.pdf','F')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM