Liebe Leute ☺
Ich versuche mich seit einigen Tagen daran, ein selbst erstelltes PDF-Formular mit Textfeldern per Batch mehrfach ausfüllen und speichern zu lassen. Das PDF habe ich selbst erstellt, die Formnamen sind mir also bekannt. Ich bin auf folgenden Thread aufmerksam geworden, der genau mein Problem angeht:
http://stackoverflow.com/questions/10476265/batch-fill-pdf-forms-from-python-or-bash?lq=1
Der Autor beschreibt, dass mit Hilfe von Python, sowie den Paketen -pdftk und dem Python-Paket -fdfgen sein Batch-Script genau das tut, was ich will: Daten aus einer CSV auslesen und diese mehrfach in die PDF Form eintragen und abspeichern.
Ich habe also eine CSV erstellt, in der ersten Zeile die namen der jeweiligen Formnamen eingetragen und in der jeweils zweiten und dritten Zeile die einzutragenden Daten gespeichert.
PDF Formular und CSV liegen, sowie das Programm erwartet, als "NVC.pdf" und "NVC.csv" vor und auch der "output" Ordner ist vorhanden.
Leider bekomme ich bei ausführen des kleinen "fill.py" Batches folgende Fehlermeldung:
1 2 3 4 | Traceback (most recent call last): File "fill.py", line 43, in <module> print('{0} {1} created...'.format(filename_prefix, i[1][1])) IndexError: list index out of range |
Hier ist der gesamte Coder der ausgeführten "fill.py"
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)
Ich habe mittler Weile bereits herausgefunden, dass dieser Fehler scheinbar auftritt, wenn eine Funktion auf ein Element einer Liste zugreift, das nicht vorhanden ist. Allerdings kenne ich mich nur sehr rudimentär mit Programmiersprachen aus, in Python leider gar nicht. Ich finde einfach nicht heraus, woran es liegt...
Ich wäre sehr dankbar für Untertsützung ☺