如何用Python/R批量生成带宾客姓名的婚礼请柬PDF?
用Python/R实现批量生成带宾客姓名的婚礼请柬PDF
完全可以用Python或R实现这个需求,以下是两种语言的具体实现思路和代码示例:
Python 实现方案
核心依赖PyMuPDF(fitz)处理PDF文本叠加,pandas读取Excel宾客名单,无需将PDF转成图片,直接在原PDF页面上叠加文本,效率较高。
步骤与代码
- 安装依赖包:
pip install pandas pymupdf
- 示例代码:
import pandas as pd import fitz # PyMuPDF # 读取Excel中的宾客姓名列表 guest_names = pd.read_excel("宾客名单.xlsx")["姓名"].tolist() # 原始婚礼请柬PDF路径 source_pdf = "婚礼请柬.pdf" # 第一页添加姓名的坐标(需自行调整,单位为PDF点,可通过PDF阅读器或PyMuPDF工具获取) name_pos = (250, 350) # (x, y),x从左到右,y从上到下 font_settings = {"fontsize": 28, "fontname": "simhei", "color": (0, 0, 0)} for name in guest_names: # 打开原始PDF并创建副本 doc = fitz.open(source_pdf) first_page = doc[0] # 在指定位置插入宾客姓名 first_page.insert_text(name_pos, name, **font_settings) # 保存专属请柬PDF doc.save(f"婚礼请柬_{name}.pdf") doc.close()
注意事项
- 坐标
name_pos需要根据你的请柬布局调整,可通过first_page.rect查看页面尺寸后计算相对位置 - 字体
simhei需确保系统已安装,若用其他中文字体,替换对应的字体名称即可
R 实现方案
依赖readxl读取Excel,pdftools提取PDF页面为图片,ggplot2添加文本,staplr合并PDF页面,适合熟悉R生态的用户。
步骤与代码
- 安装依赖包:
install.packages(c("readxl", "pdftools", "ggplot2", "staplr", "png"))
- 示例代码:
library(readxl) library(pdftools) library(ggplot2) library(staplr) library(png) # 读取宾客姓名 guest_names <- read_excel("宾客名单.xlsx")$姓名 # 原始PDF路径 source_pdf <- "婚礼请柬.pdf" # 提取第一页为高清图片 first_page_img <- pdf_convert(source_pdf, pages = 1, format = "png", dpi = 300)[1] # 姓名位置(相对图片的比例坐标,0-1范围,x=0.5为水平居中) name_x <- 0.5 name_y <- 0.3 font_size <- 18 for (name in guest_names) { # 生成带姓名的新第一页 custom_first_page <- ggplot() + annotation_raster(readPNG(first_page_img), xmin = 0, xmax = 1, ymin = 0, ymax = 1) + annotate("text", x = name_x, y = name_y, label = name, size = font_size, color = "black", family = "simhei") + theme_void() ggsave("temp_first_page.pdf", custom_first_page, width = 8.5, height = 11, units = "in") # 拆分原始PDF并合并新第一页与剩余页面 source_pages <- split_pdf(source_pdf)[-1] # 去掉原始第一页 combine_pdfs(c("temp_first_page.pdf", source_pages), output_file = paste0("婚礼请柬_", name, ".pdf")) # 清理临时文件 file.remove("temp_first_page.pdf") file.remove(source_pages) }
注意事项
width和height需匹配原始PDF的页面尺寸,避免出现变形- 同样需确保系统安装了支持中文的字体(如
simhei)
内容的提问来源于stack exchange,提问作者hereforadoubt
相关产品推荐
相关产品推荐

