2017-05-29 7 views
0

C'est la structure de base du code que j'utilise actuellement pour créer un fichier PDF pour chaque ligne de mon fichier CSV. Donc, s'il y a 10 lignes, j'attends une sortie de 10 fichiers PDF. Ce que je reçois à la place est un PDF avec toutes les lignes, ce qui crée un gros fichier.Créer plusieurs fichiers PDF avec PFDF?

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') 

Par conséquent, mes questions sont les suivantes: 1) Comment puis-je imprimer plusieurs fichiers PDF? 2) Comment faire pour que chaque PDF ait un nom de fichier unique?

Répondre

1

Le problème ici est que vous utilisez le même nom de fichier, c'est pourquoi vous obtenez seulement une sortie.

Vous devriez essayer:

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

Eh bien, en ce qui concerne 1) vous ajoutez toutes vos lignes au même objet pdf - faire de nouveaux objets pour chaque ligne, par exemple. à l'intérieur de la boucle. Concernant 2), une clarification est nécessaire - que voulez-vous dire par "unique"? Que chaque PDF que vous produisez a un nom différent? C'est facile, il suffit de remplacer:

for x in data_reader: 

avec:

for i, x in enumerate(data_reader): 

puis, comme je l'ai contient le numéro de ligne, créer des noms de fichiers dynamiquement comme ceci:

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

Si, cependant, vous voulez vous assurer que les exécutions consécutives de votre programme ne remplaceront pas les fichiers de sortie précédemment créés, cela devient un peu plus compliqué.