Per Python è necessario il lib fdfgen e PDFTK
commento di @Hugh Bothwell è corretta al 100% quindi mi estendo quella risposta con un'implementazione di lavoro.
Se ci si trova in Windows, è necessario assicurarsi che sia python sia pdftk siano contenuti nel percorso di sistema (a meno che non si desideri utilizzare nomi di cartelle lunghi).
Ecco il codice di auto-batch riempire una collezione di moduli PDF da un file di dati CSV:
import csv
from fdfgen import forge_fdf
import os
import sys
sys.path.insert(0, os.getcwd())
filename_prefix = "NVC"
csv_file = "NVC.csv"
pdf_file = "NVC.pdf"
tmp_file = "tmp.fdf"
output_folder = './output/'
def process_csv(file):
headers = []
data = []
csv_data = csv.reader(open(file))
for i, row in enumerate(csv_data):
if i == 0:
headers = row
continue;
field = []
for i in range(len(headers)):
field.append((headers[i], row[i]))
data.append(field)
return data
def form_fill(fields):
fdf = forge_fdf("",fields,[],[],[])
fdf_file = open(tmp_file,"w")
fdf_file.write(fdf)
fdf_file.close()
output_file = '{0}{1} {2}.pdf'.format(output_folder, filename_prefix, fields[1][1])
cmd = 'pdftk "{0}" fill_form "{1}" output "{2}" dont_ask'.format(pdf_file, tmp_file, output_file)
os.system(cmd)
os.remove(tmp_file)
data = process_csv(csv_file)
print('Generating Forms:')
print('-----------------------')
for i in data:
if i[0][1] == 'Yes':
continue
print('{0} {1} created...'.format(filename_prefix, i[1][1]))
form_fill(i)
Nota: Non dovrebbe essere razzo-chirurgia di capire come personalizzare questo. Le dichiarazioni delle variabili iniziali contengono la configurazione personalizzata.
Nel CSV, nella prima riga ogni colonna conterrà il nome del campo corrispondente nel file PDF. Qualsiasi colonna che non ha campi corrispondenti nel modello verrà ignorata.
Nel modello PDF, è sufficiente creare campi modificabili in cui si desidera riempire i dati e assicurarsi che i nomi corrispondano ai dati CSV.
Per questa configurazione specifica, basta mettere questo file nella stessa cartella di NVC.csv, NVC.pdf e una cartella denominata 'output'. Eseguilo e automaticamente fa il resto.
Vedi http://stackoverflow.com/questions/1890570/how- can-i-auto-populate-a-pdf-form-in-django-python –