批量实现PDF发票与对应采购元数据同页打印的技术方案咨询
批量实现PDF发票与对应采购元数据同页打印的技术方案咨询
Hey Keshav, 我明白你现在的需求——要把350份PDF发票缩小75%(也就是原尺寸的25%)后,和对应的采购元数据放在同一页打印,之前试的MailMerge确实搞不定,因为它对PDF的支持太有限了。下面给你几个不同技术门槛的解决方案,你可以根据自己的情况选:
方案一:Python脚本自动化(适合有编程基础,最灵活)
这个方案能完全自定义排版,还能直接对接数据库和云盘,适合批量处理大量文件:
- 步骤1:准备元数据:要么从数据库导出采购记录到CSV/Excel,要么用Python的数据库连接库(比如
SQLAlchemy)直接读取数据,把每条记录和对应的发票文件关联起来(比如用发票ID匹配文件名)。 - 步骤2:处理PDF缩放:用
PyPDF2或pdfplumber读取发票PDF,将页面缩小到25%;或者用ReportLab把PDF作为图片插入时直接设置缩放比例。 - 步骤3:生成合并页面:用
ReportLab或FPDF创建单页PDF,先在指定位置(比如页面左侧)插入缩小后的发票,再在空白区域填充对应的元数据(采购日期、订单号、金额等)。 - 步骤4:批量执行与合并:写循环遍历350条记录,生成每个单页的合并PDF,最后可以用
PyPDF2的PdfMerger把所有文件合并成一个大PDF,方便一次性打印。
这里给你一个简化的代码示例,帮你快速上手:
from PyPDF2 import PdfReader, PdfMerger from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter import os # 模拟从数据库/CSV读取的元数据列表,实际替换成你的数据 metadata_list = [ {"invoice_id": "INV001", "order_date": "2024-01-01", "amount": "$100.00"}, {"invoice_id": "INV002", "order_date": "2024-01-05", "amount": "$250.50"}, # ... 剩下348条记录 ] # 创建输出文件夹 os.makedirs("merged_invoices", exist_ok=True) # 批量生成单页合并PDF for metadata in metadata_list: invoice_path = f"invoices/{metadata['invoice_id']}.pdf" output_path = f"merged_invoices/{metadata['invoice_id']}_merged.pdf" # 读取发票PDF(假设发票是单页) reader = PdfReader(invoice_path) invoice_page = reader.pages[0] # 创建新的单页画布 c = canvas.Canvas(output_path, pagesize=letter) # 缩放发票到原尺寸的25%,放在页面左侧 original_w = invoice_page.mediabox.width original_h = invoice_page.mediabox.height scaled_w = original_w * 0.25 scaled_h = original_h * 0.25 c.drawImage(invoice_path, 50, 100, width=scaled_w, height=scaled_h) # 在右侧添加元数据 c.setFont("Helvetica", 12) c.drawString(400, 600, f"发票编号: {metadata['invoice_id']}") c.drawString(400, 570, f"采购日期: {metadata['order_date']}") c.drawString(400, 540, f"应付金额: {metadata['amount']}") # 可根据需要添加更多元数据字段 c.save() # 合并所有生成的PDF(可选,方便批量打印) merger = PdfMerger() for filename in os.listdir("merged_invoices"): if filename.endswith("_merged.pdf"): merger.append(f"merged_invoices/{filename}") merger.write("all_merged_invoices.pdf") merger.close()
方案二:Adobe Acrobat Pro 动作向导(适合非编程用户,可视化操作)
如果你不想写代码,Acrobat的批量处理功能能帮你搞定:
- 步骤1:批量缩放发票:打开Acrobat,进入「工具」→「动作向导」,创建新动作,添加「缩放页面」步骤,设置缩放比例为25%,选择所有发票PDF执行批量缩放。
- 步骤2:准备元数据模板:用Word创建一个模板,左侧预留缩小后发票的位置,右侧插入元数据的合并域(比如《发票编号》《采购日期》等)。
- 步骤3:邮件合并生成PDF:在Acrobat里用「邮件合并到PDF」功能,选择你的CSV元数据文件,把缩放后的发票对应插入模板位置,批量生成每个单页的合并PDF,最后直接打印或合并。
方案三:专业PDF批量处理工具(适合快速解决,无编程基础)
像PDFtk Pro、AutoBatch PDF这类工具专门做批量PDF处理:
- 先批量把所有发票缩小到25%;
- 把采购元数据整理成与发票文件名匹配的文本文件,或者用工具的数据源导入功能关联元数据;
- 设置页面布局,把缩小后的发票和元数据文本放在同一页,批量执行后即可得到所有合并页面,直接打印。
一些注意事项
- 先拿1-2份发票做测试,调整元数据位置和发票缩放比例,确保排版符合预期后再批量处理;
- 如果发票是多页的,需要先提取第一页(或需要的页面)再进行缩放;
- 若发票存在云盘(比如Google Drive),方案一的Python脚本可以结合对应云盘API直接下载文件,不用手动导出。
备注:内容来源于stack exchange,提问作者Keshav
相关产品推荐
相关产品推荐

