Compare commits
1 commit
1736c6e3ab
...
e2855e9161
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2855e9161 |
1 changed files with 14 additions and 13 deletions
|
|
@ -10,11 +10,11 @@ from fillpdf import fillpdfs
|
|||
from pdfrw import PdfReader, PdfWriter
|
||||
|
||||
# Change to your needs
|
||||
start_date = "2024-10-30"
|
||||
end_date = "2024-11-03"
|
||||
start_date = "2025-10-29"
|
||||
end_date = "2025-11-02"
|
||||
event_org = "Verein der Freunde und Förderer der Bundesfachschaftentagung Elektrotechnik e.V."
|
||||
event_name = "95. Bundesfachschaftentagung Elektrotechnik"
|
||||
attendees_csv = "95_teilnehmer.csv"
|
||||
event_name = "97. Bundesfachschaftentagung Elektrotechnik"
|
||||
attendees_csv = "97_teilnehmer.csv"
|
||||
empty_sheets = 1
|
||||
template_form = "Teilnehmendenliste_FR_22_23_final.pdf"
|
||||
|
||||
|
|
@ -22,7 +22,7 @@ template_form = "Teilnehmendenliste_FR_22_23_final.pdf"
|
|||
|
||||
start = datetime.date.fromisoformat(start_date)
|
||||
end = datetime.date.fromisoformat(end_date)
|
||||
event_period = f'{start.strftime("%d.%m")} - {end.strftime("%d.%m.%y")}'
|
||||
event_period = f'{start.strftime("%d.%m.%y")} - {end.strftime("%d.%m.%y")}'
|
||||
days = int((end - start).days)
|
||||
date_list = [(start + datetime.timedelta(days=i)).strftime('%d.%m.%y') for i in range(days + 1)]
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ form_mapping = [("6", "20", "21"), ("19", "40", "41"), ("18", "39", "22"),
|
|||
|
||||
def read_csv(csv_path):
|
||||
try:
|
||||
csvfile = open(csv_path, newline='')
|
||||
csvfile = open(csv_path, newline='', encoding='utf-8')
|
||||
except FileNotFoundError:
|
||||
print("[X] File {} not found!".format(csv_path))
|
||||
sys.exit(1)
|
||||
|
|
@ -44,24 +44,23 @@ def read_csv(csv_path):
|
|||
persons = [{"Name": f"{t['Amtlicher Vorname'] if t['Amtlicher Vorname'] else t['Vorname']} {t['Nachname']}", "Hochschule": f"{t['Standort']}"} for t in reader if
|
||||
t['Status'] == "Immatrikuliert"]
|
||||
persons.sort(key=itemgetter("Hochschule", "Name"))
|
||||
for idx, p in enumerate(persons):
|
||||
p["Position"] = str(idx + 1)
|
||||
|
||||
return persons
|
||||
|
||||
|
||||
def fill_template(template_path, persons_list, headers, output_path):
|
||||
def fill_template(template_path, persons_list, headers, output_path, start_index=1):
|
||||
fields = {}
|
||||
|
||||
for person, mapping in zip(persons_list, form_mapping):
|
||||
fields[mapping[0]] = person["Position"]
|
||||
for idx, (person, mapping) in enumerate(zip(persons_list, form_mapping), start=start_index):
|
||||
fields[mapping[0]] = str(idx)
|
||||
fields[mapping[1]] = person["Name"]
|
||||
fields[mapping[2]] = person["Hochschule"]
|
||||
|
||||
fields = {**headers, **fields}
|
||||
|
||||
fillpdfs.write_fillable_pdf(input_pdf_path=template_path, output_pdf_path=output_path, data_dict=fields,
|
||||
flatten=True)
|
||||
flatten=False)
|
||||
|
||||
|
||||
|
||||
def create_pdf(output_pdf, form, persons_chunks, zeitraum, form_date, org_name, name, add_sheets):
|
||||
|
|
@ -72,11 +71,13 @@ def create_pdf(output_pdf, form, persons_chunks, zeitraum, form_date, org_name,
|
|||
form_reader = PdfReader(template_form)
|
||||
writer.trailer.Info = form_reader.Info
|
||||
|
||||
person_index = 1 # Fortlaufende Nummerierung über alle Seiten
|
||||
with tempfile.TemporaryDirectory() as workdir:
|
||||
for persons_list in persons_chunks + [[] for i in range(add_sheets)]:
|
||||
output_file_path = os.path.join(workdir, f'{output_file_name}{page}.pdf')
|
||||
headers = {"1": page, "2": zeitraum, "3": form_date, "4": org_name, "5": name}
|
||||
fill_template(template_path=form, persons_list=persons_list, headers=headers, output_path=output_file_path)
|
||||
fill_template(template_path=form, persons_list=persons_list, headers=headers, output_path=output_file_path, start_index=person_index)
|
||||
person_index += len(persons_list) # Erhöhe den Index für die nächste Seite
|
||||
reader = PdfReader(output_file_path)
|
||||
writer.addpages(reader.pages)
|
||||
page += 1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue