2017-05-29 94 views
0

這是我目前用於爲CSV文件中每行創建一個PDF文件的代碼的基本結構。所以如果有10行,我期望輸出10個PDF。我得到的是一個包含所有行的PDF,它創建一個大文件。使用PFDF創建多個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都有唯一的文件名?

回答

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 
0

嗯,關於1)您要添加的所有行相同的PDF對象 - 每一行作出新的對象,即。在循環內。關於2),一些澄清是必要的 - 你是什麼意思的「獨特」?您生成的每個PDF都有不同的名稱?這很容易,只需更換:

for x in data_reader: 

有:

for i, x in enumerate(data_reader): 

,然後,因爲我包含行號,創建文件名動態如下:

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

但是,如果你想確保隨後的程序運行不會覆蓋以前創建的輸出文件,這會變得更復雜一點。