You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python/R批量生成带宾客姓名的婚礼请柬PDF?

用Python/R实现批量生成带宾客姓名的婚礼请柬PDF

完全可以用Python或R实现这个需求,以下是两种语言的具体实现思路和代码示例:

Python 实现方案

核心依赖PyMuPDF(fitz)处理PDF文本叠加,pandas读取Excel宾客名单,无需将PDF转成图片,直接在原PDF页面上叠加文本,效率较高。

步骤与代码

  1. 安装依赖包:
pip install pandas pymupdf
  1. 示例代码:
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生态的用户。

步骤与代码

  1. 安装依赖包:
install.packages(c("readxl", "pdftools", "ggplot2", "staplr", "png"))
  1. 示例代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:52:34