一种简单的方法是从 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