windows fix
This commit is contained in:
parent
1f9d445b0b
commit
1736c6e3ab
2 changed files with 93094 additions and 13 deletions
|
|
@ -10,11 +10,11 @@ from fillpdf import fillpdfs
|
||||||
from pdfrw import PdfReader, PdfWriter
|
from pdfrw import PdfReader, PdfWriter
|
||||||
|
|
||||||
# Change to your needs
|
# Change to your needs
|
||||||
start_date = "2024-10-30"
|
start_date = "2025-10-29"
|
||||||
end_date = "2024-11-03"
|
end_date = "2025-11-02"
|
||||||
event_org = "Verein der Freunde und Förderer der Bundesfachschaftentagung Elektrotechnik e.V."
|
event_org = "Verein der Freunde und Förderer der Bundesfachschaftentagung Elektrotechnik e.V."
|
||||||
event_name = "95. Bundesfachschaftentagung Elektrotechnik"
|
event_name = "97. Bundesfachschaftentagung Elektrotechnik"
|
||||||
attendees_csv = "95_teilnehmer.csv"
|
attendees_csv = "97_teilnehmer.csv"
|
||||||
empty_sheets = 1
|
empty_sheets = 1
|
||||||
template_form = "Teilnehmendenliste_FR_22_23_final.pdf"
|
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)
|
start = datetime.date.fromisoformat(start_date)
|
||||||
end = datetime.date.fromisoformat(end_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)
|
days = int((end - start).days)
|
||||||
date_list = [(start + datetime.timedelta(days=i)).strftime('%d.%m.%y') for i in range(days + 1)]
|
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):
|
def read_csv(csv_path):
|
||||||
try:
|
try:
|
||||||
csvfile = open(csv_path, newline='')
|
csvfile = open(csv_path, newline='', encoding='utf-8')
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
print("[X] File {} not found!".format(csv_path))
|
print("[X] File {} not found!".format(csv_path))
|
||||||
sys.exit(1)
|
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
|
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"]
|
t['Status'] == "Immatrikuliert"]
|
||||||
persons.sort(key=itemgetter("Hochschule", "Name"))
|
persons.sort(key=itemgetter("Hochschule", "Name"))
|
||||||
for idx, p in enumerate(persons):
|
|
||||||
p["Position"] = str(idx + 1)
|
|
||||||
|
|
||||||
return persons
|
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 = {}
|
fields = {}
|
||||||
|
|
||||||
for person, mapping in zip(persons_list, form_mapping):
|
for idx, (person, mapping) in enumerate(zip(persons_list, form_mapping), start=start_index):
|
||||||
fields[mapping[0]] = person["Position"]
|
fields[mapping[0]] = str(idx)
|
||||||
fields[mapping[1]] = person["Name"]
|
fields[mapping[1]] = person["Name"]
|
||||||
fields[mapping[2]] = person["Hochschule"]
|
fields[mapping[2]] = person["Hochschule"]
|
||||||
|
|
||||||
fields = {**headers, **fields}
|
fields = {**headers, **fields}
|
||||||
|
|
||||||
fillpdfs.write_fillable_pdf(input_pdf_path=template_path, output_pdf_path=output_path, data_dict=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):
|
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)
|
form_reader = PdfReader(template_form)
|
||||||
writer.trailer.Info = form_reader.Info
|
writer.trailer.Info = form_reader.Info
|
||||||
|
|
||||||
|
person_index = 1 # Fortlaufende Nummerierung über alle Seiten
|
||||||
with tempfile.TemporaryDirectory() as workdir:
|
with tempfile.TemporaryDirectory() as workdir:
|
||||||
for persons_list in persons_chunks + [[] for i in range(add_sheets)]:
|
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')
|
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}
|
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)
|
reader = PdfReader(output_file_path)
|
||||||
writer.addpages(reader.pages)
|
writer.addpages(reader.pages)
|
||||||
page += 1
|
page += 1
|
||||||
|
|
|
||||||
93080
output.pdf
Normal file
93080
output.pdf
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue