dla Pythona musisz lib fdfgen i pdftk
komentarz @Hugh Bothwell jest 100% poprawne więc będę przedłużać tę odpowiedź z realizacji pracy.
Jeśli używasz Windowsa, musisz się upewnić, że zarówno Python, jak i Pdftk są zawarte w ścieżce systemowej (chyba że chcesz używać długich nazw folderów).
Oto kod do automatycznego partii napełnić zbiór formularzy PDF z pliku danych w formacie 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)
Uwaga: To nie powinno być rakieta-chirurgia, aby dowiedzieć się, jak dostosować ten. Początkowe deklaracje zmiennych zawierają niestandardową konfigurację.
W pliku CSV w pierwszym wierszu każda kolumna będzie zawierała nazwę odpowiadającej nazwy pola w pliku PDF. Wszystkie kolumny, które nie mają odpowiednich pól w szablonie, zostaną zignorowane.
W szablonie PDF po prostu utwórz edytowalne pola, w których chcesz wypełnić dane, i upewnij się, że nazwy pasują do danych CSV.
Dla tej konkretnej konfiguracji, po prostu umieść ten plik w tym samym folderze co plik NVC.csv, NVC.pdf i folder o nazwie "output". Uruchom go i automagicznie zajmie się resztą.
Zobacz http://stackoverflow.com/questions/1890570/how- can-i-auto-populate-a-pdf-form-in-django-python –