使用PFDF创建多个PDF文件?

时间:2017-05-29 16:53:41

标签: python pdf for-loop fpdf

这是我目前用于为CSV文件中的每一行创建一个PDF文件的代码的基本结构。所以,如果有10行,我期望输出10个PDF。我得到的是一个包含所有行的PDF,它会创建一个大文件。

with open('new1.csv', 'r', newline='') as x:
    data_reader = csv.DictReader(x, delimiter=',', quotechar='"')
    for x in data_reader:
        record = x['Test ID']
        record_str = 'Test ID: ' + record
        name = x['Name']
        name_1 = 'Name: ' + name
        pdf.cell(effective_page_width / 5.0, 0.0, record_str)
        pdf.cell(effective_page_width / 5.0, 0.0, name_1)

        More variables like the ones above

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

因此,我的问题是: 1)如何打印多个PDF? 2)如何使每个PDF具有唯一的文件名?

2 个答案:

答案 0 :(得分:1)

这里的问题是您使用相同的文件名,这就是为什么您只能获得一个输出。

你应该尝试:

with open('new1.csv', 'r', newline='') as x:
    data_reader = csv.DictReader(x, delimiter=',', quotechar='"')
    index=0
    for x in data_reader:
        # Reset your pdf variable
        pdf=FPDF()
        ...
        filename='Test'+str(index)+'.pdf'
        pdf.output(filename,'F')
        index+=1

答案 1 :(得分:0)

好吧,关于1)你将所有行添加到同一个pdf对象中 - 为每一行创建新对象,即。在循环内。关于2),有些澄清是必要的 - 你是什么意思"独特"?您生成的每个PDF都有不同的名称?这很简单,只需更换:

for x in data_reader:

使用:

for i, x in enumerate(data_reader):

然后,当我包含行号时,动态创建文件名:

pdf.output('Test{}.pdf'.format(i), 'F')

但是,如果您希望确保程序的后续运行不会覆盖以前创建的输出文件,则会变得有点复杂。