Spaces:
Sleeping
Sleeping
| import io | |
| import os | |
| import fitz # PyMuPDF | |
| pdf_path_dict = { | |
| "old": "src/assets/InvitationTemplateCompressed.pdf", | |
| "common": "src/assets/WWEC嘉宾邀请函mini.pdf", | |
| "观礼": "src/assets/WWEC列席嘉宾邀请函.pdf", | |
| "演讲": "src/assets/WWEC演讲嘉宾邀请函.pdf", | |
| "致辞": "src/assets/WWEC演讲嘉宾邀请函.pdf", | |
| } | |
| # font_path = "src/assets/NotoSansHans-Regular.otf" | |
| # other_font_path = "src/assets/SourceHanSansCN-VF-2.otf" | |
| # other_font_path = "src/assets/ZhouZiSongTi7000Zi-2.otf" | |
| font_path = "src/assets/字魂59号-创粗黑.ttf" | |
| other_font_path = "src/assets/FangZhengHeiTiJianTi-1.ttf" | |
| # font = fitz.Font(fontfile=font_path) | |
| def getInvitationPDF(data): | |
| pdf_path = pdf_path_dict[data["category"]] | |
| doc = fitz.open(pdf_path) | |
| for page in doc: | |
| fields = page.widgets() | |
| for field in fields: | |
| if field.field_name in data: | |
| # field.font = font | |
| field.field_value = data[field.field_name] | |
| field.update() | |
| pdfStream = io.BytesIO() | |
| doc.save(pdfStream) | |
| doc.close() | |
| if os.path.exists("src/assets/output"): | |
| with open("src/assets/output/output.pdf", 'wb') as f: | |
| f.write(pdfStream.getvalue()) | |
| return pdfStream | |
| def writeInvitationPDF(person): | |
| font_size=70 | |
| pdf_path = pdf_path_dict[person.category] | |
| doc = fitz.open(pdf_path) | |
| page = doc.load_page(1) | |
| page.insert_font(fontname="name_font", fontfile=font_path) | |
| page.insert_font(fontname="f", fontfile=font_path) | |
| page.insert_text((380, 220), | |
| person.name+person.title, fontname="name_font", fontsize=min(font_size, font_size*5/len(person.name+person.title)), color=(1, 1, 1)) | |
| if person.category == "演讲" or person.category == "致辞": | |
| page.insert_text((210, 980), | |
| person.conference, fontname="f", fontsize=min(font_size, font_size*14/len(person.conference)), color=(1, 1, 1)) | |
| pdfStream = io.BytesIO() | |
| doc.save(pdfStream) | |
| doc.close() | |
| if os.path.exists("src/assets/output"): | |
| with open("src/assets/output/output.pdf", 'wb') as f: | |
| f.write(pdfStream.getvalue()) | |
| return pdfStream | |
| if __name__ == "__main__": | |
| from collections import namedtuple | |
| Person = namedtuple('Person', ['name', 'title', 'category', 'conference', 'respond_person']) | |
| person = Person(name="周鸿祎", title="先生", category="致辞", conference="8月21日中欧智慧论坛,做主题演讲", respond_person="Eazy") | |
| output_path = 'output/output.pdf' | |
| # getInvitationPDF(data) | |
| writeInvitationPDF(person) | |
| # with open(output_path, 'wb') as f: | |
| # f.write(pdfStream.getvalue()) |