一个简单的方法是在Acrobat中从原始文档中创建一个可填写的pdf表单,并使用该表单和csv进行邮件合并。
PDF邮件合并在Python和pdftk中相对较容易实现。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,选择要使用哪些列填充哪些表单字段,如果需要,为每个已填充的pdf创建命名约定,并批量生成填充的PDf。
免责声明:我编写了PdfZero。