如何将DataFrame指定位置值打印至PDF?批量填充PDF表单生成文件
解答你的两个PDF与DataFrame相关问题
1. 将DataFrame特定位置的值输出到PDF
我通常会用fpdf2这个轻量库来做这类简单的PDF生成,步骤很直接:
- 先安装依赖库:
pip install fpdf2 - 编写代码提取特定值并写入PDF:
from fpdf import FPDF import pandas as pd # 示例DataFrame(替换成你的实际数据) df = pd.DataFrame({ "姓名": ["张三", "李四"], "年龄": [25, 30], "城市": ["北京", "上海"] }) # 提取特定位置的值:比如第1行第2列(索引从0开始) target_value = df.iloc[0, 1] # 这里得到值25 # 创建PDF对象并设置格式 pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) # 将值写入PDF,ln=True表示写完换行,align='C'表示居中 pdf.cell(200, 10, txt=f"DataFrame特定位置的值:{target_value}", ln=True, align='C') # 保存生成的PDF pdf.output("特定值输出.pdf")
如果需要输出多个特定值或自定义排版,可以用pdf.text(x, y, txt)方法指定坐标写入,灵活性更高。
2. 以PDF为背景,填充DataFrame数据生成独立文件
这种需求分两种常见场景,我分别给你实用方案:
场景A:PDF是可交互的AcroForm表单
如果你的PDF本身是带可填写字段的标准表单,直接用pypdf库填充字段最省心:
- 安装库:
pip install pypdf - 代码示例(每行数据生成一个独立PDF):
from pypdf import PdfWriter, PdfReader import pandas as pd df = pd.DataFrame({ "姓名": ["张三", "李四"], "年龄": [25, 30], "城市": ["北京", "上海"] }) # 你的表单模板PDF路径 template_path = "表单模板.pdf" for idx, row in df.iterrows(): writer = PdfWriter() reader = PdfReader(template_path) page = reader.pages[0] # 先打印所有字段名,方便确认对应关系(第一次运行时可以打开注释) # print(reader.get_fields()) # 填充对应字段,这里假设表单字段名和DataFrame列名一致 writer.add_page(page) writer.update_page_form_field_values( writer.pages[0], { "姓名": row["姓名"], "年龄": str(row["年龄"]), # 表单字段通常要求字符串类型 "城市": row["城市"] } ) # 保存每个独立的填充后文件 output_path = f"填充后的表单_{idx+1}.pdf" with open(output_path, "wb") as output_file: writer.write(output_file)
场景B:PDF是普通静态文件(作为背景)
如果你的PDF只是静态背景图,没有可填写字段,就用fpdf2导入背景后,在指定坐标写入数据:
- 安装库:
pip install fpdf2 - 代码示例:
from fpdf import FPDF import pandas as pd df = pd.DataFrame({ "姓名": ["张三", "李四"], "年龄": [25, 30], "城市": ["北京", "上海"] }) # 背景PDF路径 background_pdf = "背景模板.pdf" for idx, row in df.iterrows(): pdf = FPDF() pdf.add_page() # 导入背景PDF的第一页,铺满整个页面 pdf.image(background_pdf, x=0, y=0, w=pdf.w, h=pdf.h) # 设置字体(可以根据需求调整字体、大小、颜色) pdf.set_font("Arial", size=12) # 假设每个字段的坐标已知(用PDF阅读器的测量工具可获取,x从左到右,y从上到下) pdf.text(x=50, y=60, txt=row["姓名"]) pdf.text(x=50, y=80, txt=str(row["年龄"])) pdf.text(x=50, y=100, txt=row["城市"]) # 保存生成的文件 pdf.output(f"填充后的文件_{idx+1}.pdf")
小提示:如果不确定坐标,可以先在PDF里用文本工具试写位置,再对应到代码的x、y参数。
内容的提问来源于stack exchange,提问作者Carmen Sandoval
相关产品推荐
相关产品推荐

