首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >批量把 Word/PDF 生成二维码,按编号自动命名的实操教程

批量把 Word/PDF 生成二维码,按编号自动命名的实操教程

原创
作者头像
采墨人
发布于 2026-11-09 17:27:32
发布于 2026-11-09 17:27:32
220
举报

​

一、需求场景:为什么要批量生成二维码

在实际工作中,我们经常会遇到这样的场景:手上有几十甚至上百份 Word 或 PDF 文档,需要为每一份生成一个二维码,方便扫码后直接打开对应文件。例如:

  • 培训资料分发:把每份课件生成二维码,学员扫码即可下载对应文件。
  • 合同与档案管理:为每份合同生成二维码,贴在纸质档案上,扫码即可查看电子版。
  • 产品说明书:不同型号的说明书分别生成二维码,印在包装上。
  • 考试与作业:为每份试卷或作业生成二维码,按学号或编号自动命名,便于归档。

如果手动一个个生成,不仅效率低,还容易出错。本文介绍一套可复用的批量方案:读取文件夹中的 Word/PDF 文件,按文件名(编号)自动生成二维码,并以编号命名保存。

二、整体思路与流程图

整个方案的核心逻辑非常清晰:遍历文件夹 → 为每个文件生成可访问链接 → 生成二维码 → 按编号命名保存。下面用流程图展示完整步骤。

代码语言:javascript
复制
flowchart TD
    A[准备 Word/PDF 文件夹] --> B[遍历文件列表]
    B --> C{是否还有文件}
    C -- 是 --> D[提取文件名作为编号]
    D --> E[生成文件访问链接]
    E --> F[调用二维码库生成图片]
    F --> G[按编号命名保存 PNG]
    G --> C
    C -- 否 --> H[输出结果清单]
    H --> I[完成]

这里有一个关键前提:二维码扫码后要能打开文件,文件必须有一个可访问的 URL。因此方案分为两种模式:

  • 本地模式:二维码内容为本地文件路径,适合局域网或本机使用(部分扫码工具支持)。
  • 在线模式:先把文件上传到网盘、对象存储或内网服务器,二维码内容为下载链接,通用性最好。

本文以在线模式为主,同时给出本地模式的写法,读者可按需选择。

三、环境准备

本教程使用 Python 实现,依赖两个核心库:

  • qrcode:生成二维码图片。
  • Pillow:图像处理,qrcode 生成图片时依赖它。

安装命令如下:

代码语言:javascript
复制
pip install qrcode[pil]

如果需要读取 Word 或 PDF 中的元信息(例如标题、编号),还可以按需安装:

代码语言:javascript
复制
pip install python-docx PyPDF2

建议使用 Python 3.8 及以上版本,并在虚拟环境中安装依赖,避免污染全局环境。

四、核心代码实现

4.1 基础版本:遍历文件夹并生成二维码

先实现最核心的功能:遍历指定文件夹,为每个 Word/PDF 文件生成二维码,并按文件名(不含扩展名)命名保存。

代码语言:javascript
复制
import os
import qrcode
配置:源文件夹、输出文件夹、文件访问前缀
SOURCE_DIR = "./documents"      # 存放 Word/PDF 的文件夹
OUTPUT_DIR = "./qrcodes"        # 二维码输出文件夹
URL_PREFIX = "https://example.com/files/"  # 文件在线访问前缀
支持的文件扩展名
SUPPORTED_EXTS = (".doc", ".docx", ".pdf")
def ensure_dir(path):
if not os.path.exists(path):
os.makedirs(path)
def generate_qrcode(content, save_path):
qr = qrcode.QRCode(
version=None,
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=10,
border=4,
)
qr.add_data(content)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save(save_path)
def batch_generate(source_dir, output_dir, url_prefix):
ensure_dir(output_dir)
count = 0
for filename in os.listdir(source_dir):
name, ext = os.path.splitext(filename)
if ext.lower() not in SUPPORTED_EXTS:
continue
# 二维码内容:在线访问链接
content = url_prefix + filename
save_path = os.path.join(output_dir, f"{name}.png")
generate_qrcode(content, save_path)
print(f"已生成:{save_path}  ->  {content}")
count += 1
print(f"共生成 {count} 个二维码")
if name == "main":
batch_generate(SOURCE_DIR, OUTPUT_DIR, URL_PREFIX)

运行后,./qrcodes 目录下会得到与源文件同名的 PNG 图片,例如 001.pdf 对应 001.png,实现了按编号自动命名。

4.2 本地模式:二维码内容为本地路径

如果文件只在局域网或本机使用,可以把二维码内容改为本地绝对路径:

代码语言:javascript
复制
content = os.path.abspath(os.path.join(source_dir, filename))

注意:本地路径二维码需要扫码工具支持打开本地文件,通用性不如在线链接,建议仅在内部场景使用。

4.3 增强版本:编号补零与结果清单

实际归档时,编号往往需要统一位数,例如 001、002。同时建议输出一份 CSV 清单,记录编号、文件名和二维码路径,方便后续核对。

代码语言:javascript
复制
import csv
def batch_generate_with_manifest(source_dir, output_dir, url_prefix, width=3):
ensure_dir(output_dir)
manifest = []
files = sorted(
f for f in os.listdir(source_dir)
if os.path.splitext(f)[1].lower() in SUPPORTED_EXTS
)
for index, filename in enumerate(files, start=1):
name, ext = os.path.splitext(filename)
# 若原文件名不是纯数字,则按序号补零命名
code = name if name.isdigit() else str(index).zfill(width)
content = url_prefix + filename
save_path = os.path.join(output_dir, f"{code}.png")
generate_qrcode(content, save_path)
manifest.append({
"编号": code,
"源文件": filename,
"二维码内容": content,
"二维码路径": save_path,
})
# 输出清单
manifest_path = os.path.join(output_dir, "manifest.csv")
with open(manifest_path, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=["编号", "源文件", "二维码内容", "二维码路径"])
writer.writeheader()
writer.writerows(manifest)
print(f"共生成 {len(manifest)} 个二维码,清单:{manifest_path}")

这样既保证了命名规范,又留下了可追溯的记录。

五、参数配置与常见问题

5.1 二维码清晰度与容错级别

参数

说明

建议值

box_size

每个小方块的像素大小

10(打印可调大)

border

二维码四周留白格数

4

error_correction

容错级别,L/M/Q/H 依次增强

M 或 Q

如果二维码需要印刷,建议把 box_size 调大,并选择 ERROR_CORRECT_Q,提高破损情况下的识别率。

5.2 常见问题排查

  • 扫码打不开文件:检查链接是否可公网或局域网访问,路径中是否包含中文或空格(建议 URL 编码)。
  • 中文文件名乱码:保存 CSV 时使用 utf-8-sig 编码,Excel 打开才不会乱码。
  • 二维码内容过长:链接过长会导致二维码密集,建议使用短链接服务或缩短存储路径。
  • 文件重复覆盖:若存在同名不同扩展名的文件(如 001.doc 和 001.pdf),需要额外加扩展名区分。

六、进阶优化建议

  • 批量上传自动化:结合对象存储 SDK(如阿里云 OSS、腾讯云 COS),在生成二维码前自动上传文件并获取链接。
  • 二维码美化:使用 qrcode 的 StyledPilImage 或第三方库添加 Logo、圆角,提升视觉效果。
  • 批量打印排版:将生成的二维码图片用 reportlab 或 Word 模板批量排版,直接输出可打印的 PDF。
  • 任务可视化:为脚本加一个简单的 GUI(如 tkinter)或命令行参数,方便非技术同事使用。
  • 借助在线二维码平台:如果不想自己维护生成脚本,也可以把文件上传后,用八木屋二维码这类在线工具批量生成二维码,省去本地环境配置和图片排版的工作。

6.1 用八木屋二维码承接生成与美化环节

前面几节的方案适合需要深度定制、批量规模较大或要接入自有系统的场景。如果只是偶尔为一批文档生成二维码,或者希望二维码更美观、可随时修改内容,可以借助八木屋二维码这类在线平台,把「生成」和「美化」这两步交给现成工具完成。

结合本文的批量场景,八木屋二维码比较实用的功能点包括:

  • 文件二维码:直接上传 Word、PDF 等文件生成二维码,扫码即可查看或下载,无需自己搭建文件服务器,正好对应本文「在线模式」中生成可访问链接这一步。
  • 批量生成:支持一次导入多条内容批量生成二维码,适合几十上百份文档的归档场景,省去逐个创建的操作。
  • 二维码美化:可设置颜色、添加 Logo、调整样式,替代本地用 StyledPilImage 做美化的代码量,打印出来更符合品牌或档案规范。
  • 内容可更新:部分二维码支持生成后修改指向内容,文件换版本时不必重新打印二维码,适合合同、说明书这类会迭代的资料。
  • 扫码数据统计:可以查看扫码次数等数据,便于了解哪些资料被查阅得更多,为后续资料分发提供参考。

一个常见的组合做法是:本地脚本负责遍历文件夹、统一编号和生成清单,把文件按编号整理好后上传到八木屋二维码批量生成,再把生成的二维码图片按编号回填到清单中。这样既保留了脚本的规范化命名能力,又利用了在线工具在文件托管、美化和统计上的便利。

​

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、需求场景:为什么要批量生成二维码
  • 二、整体思路与流程图
  • 三、环境准备
  • 四、核心代码实现
    • 4.1 基础版本:遍历文件夹并生成二维码
    • 4.2 本地模式:二维码内容为本地路径
    • 4.3 增强版本:编号补零与结果清单
  • 五、参数配置与常见问题
    • 5.1 二维码清晰度与容错级别
    • 5.2 常见问题排查
  • 六、进阶优化建议
    • 6.1 用八木屋二维码承接生成与美化环节
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档