一种简单的方法是在 Acrobat 中从原始文档创建一个可填写的 pdf 表单,然后将表单和 csv 进行邮件合并。
PDF 邮件合并在 python 和pdftk 中相对容易。 Fdfgen (pip install fdfgen) 是一个 python 库,它将从 python 数组创建一个 fdf,因此您可以将 excel 网格保存到 csv,确保 csv 标题与您要填充的 pdf 表单字段的名称匹配该列,并执行类似的操作
import csv
import subprocess
from fdfgen import forge_fdf
PDF_FORM = 'path/to/form.pdf'
CSV_DATA = 'path/to/data.csv'
infile = open(CSV_DATA, 'rb')
reader = csv.DictReader(infile)
rows = [row for row in reader]
infile.close()
for row in rows:
# Create fdf
filename = row['filename'] # Construct filename
fdf_data = [(k,v) for k, v in row.items()]
fdf = forge_fdf(fdf_data_strings=fdf_data)
fdf_file = open(filename+'.fdf', 'wb')
fdf_file.write(fdf)
fdf_file.close()
# Use PDFTK to create filled, flattened, pdf file
cmds = ['pdftk', PDF_FORM, 'fill_form', filename+'.fdf',
'output', filename+'.pdf', 'flatten', 'dont_ask']
process = subprocess.Popen(cmds, stdout=subprocess.PIPE)
stdout, stderr = process.communicate()
returncode = process.poll()
os.remove(filename+'.fdf')
我已经遇到了足够多的问题来编写我自己的免费解决方案PdfZero。 PdfZero 具有邮件合并功能,可将电子表格与 PDF 表单合并。您仍然需要创建一个 PDF 表单,但您可以将表单和 csv 上传到 pdfzero,选择要填充哪些列的表单字段,如果需要,使用 csv 数据为每个填充的 pdf 创建命名约定,然后批量生成填充的 PDfs。
免责声明:我写了 PdfZero