diff --git a/generate_bmbf_list.py b/generate_bmbf_list.py index ccc476b..6486311 100644 --- a/generate_bmbf_list.py +++ b/generate_bmbf_list.py @@ -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