这是我目前用于为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具有唯一的文件名?
答案 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')
但是,如果您希望确保程序的后续运行不会覆盖以前创建的输出文件,则会变得有点复杂。