网站首页/ 信息中心/ 档案百科/

档案培训考试准考证批量打印自动化实操指南

发布时间:2026年08月19日 09:50:23 浏览量:0

技术选型与环境准备

为了实现档案培训考试准考证的自动化生成与打印,我们将采用 Python 作为核心开发语言,结合 pdfkitwkhtmltopdf 完成HTML到PDF的高保真转换。这套方案的优势在于能够利用 CSS 精准控制排版,完美还原准考证的表格、边框及字体要求,且支持批量处理数据。

安装 wkhtmltopdf 核心引擎

pdfkit 依赖于 wkhtmltopdf 这一轻量级命令行工具。请根据你的操作系统直接下载对应的稳定版安装包。不要去官网寻找复杂的路径,直接使用以下链接:

Windows 64位下载地址:https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox-0.12.6.1-2.msvc2015-win64.exe

Linux (CentOS) 安装命令:

sudo yum install -y wkhtmltopdf

注意:Windows 用户安装时必须勾选 "Add directory to PATH" 环境变量配置项,否则后续脚本无法调用。如果忘记勾选,请手动将安装路径(通常为 C:\Program Files\wkhtmltopdf\bin)添加到系统环境变量 Path 中。

安装 Python 依赖库

在命令行终端中执行以下命令,安装所需的 Python 库。我们使用 jinja2 进行模板渲染,使用 pdfkit 进行文件转换。

pip install pdfkit jinja2

构建准考证数据源

实操的第一步是准备数据。通常考生的信息存储在 Excel 中,为了代码的通用性,我们构建一个 JSON 格式的数据源。在你的项目根目录下创建一个名为 data.json 的文件,并填入以下测试数据。这模拟了从数据库导出的考生列表。

```json

[

{

"name": "张伟",

"id_card": "110101199001011234",

"exam_id": "DA20231001",

"subject": "档案管理基础实务",

"exam_date": "2023-11-15",

"exam_time": "09:00-11:30",

"location": "北京市第一职业技术学校",

"room": "教学楼302室",

"seat": "05"

},

{

"name": "李娜",

"id_card": "320501199205206789",

"exam_id": "DA20231002",

"subject": "档案信息化建设",

"exam_date": "2023-11-15",

"exam_time": "14:00-16:30",

"location": "北京市第一职业技术学校",

"room": "实验楼205室",

"seat": "12"

}

]

```

设计高还原度 HTML 模板

准考证的排版至关重要。我们将创建一个 HTML 模板文件 template.html,利用 CSS 确保打印出来的效果规范、整齐。该模板使用了 Jinja2 的语法 {{ variable }} 来标记动态插入的数据位置。

在项目根目录下创建 template.html,代码如下:

```html

2023年度档案专业人员培训考试准考证

姓名 {{ name }} 准考证号 {{ exam_id }}
身份证号 {{ id_card }}
考试科目 {{ subject }}
考试时间 {{ exam_date }} {{ exam_time }}
考试地点 {{ location }}
考场教室 {{ room }} 座位号 {{ seat }}

考生须知:

档案培训考试准考证批量打印自动化实操指南

1. 考生须携带准考证和有效身份证件提前30分钟入场。

2. 考试开始15分钟后禁止入场。

3. 请将手机等通讯工具关闭后放在指定位置。

4. 保持考场安静,独立完成答卷。

```

编写自动化生成与打印脚本

这是整个流程的核心部分。我们将编写一个 Python 脚本,它负责读取 JSON 数据,加载 HTML 模板,将数据注入模板,调用 wkhtmltopdf 生成 PDF,并最后调用系统默认打印机进行打印。

在项目根目录下创建 auto_print.py

```python

import os

import json

import pdfkit

from jinja2 import Template

import subprocess

import platform

配置路径

DATA_FILE = 'data.json'

TEMPLATE_FILE = 'template.html'

OUTPUT_DIR = 'tickets'

确保输出目录存在

if not os.path.exists(OUTPUT_DIR):

os.makedirs(OUTPUT_DIR)

Windows下配置wkhtmltopdf路径,如果是Linux且已加入PATH则可省略

SYSTEM = platform.system()

if SYSTEM == 'Windows':

请根据实际安装路径修改,或者确保已配置环境变量

如果配置了环境变量,config可以留空,但显式指定更稳健

config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe')

else:

config = pdfkit.configuration()

def render_template(data):

"""加载HTML模板并注入数据"""

with open(TEMPLATE_FILE, 'r', encoding='utf-8') as f:

template_content = f.read()

template = Template(template_content)

return template.render(data)

def generate_pdf(html_content, filename):

"""将HTML内容转换为PDF文件"""

output_path = os.path.join(OUTPUT_DIR, filename)

options 中的参数是为了优化PDF显示效果

options = {

'encoding': 'UTF-8',

'margin-top': '0',

'margin-bottom': '0',

'margin-left': '0',

'margin-right': '0',

'enable-local-file-access': None 允许访问本地文件(如图片)

}

try:

pdfkit.from_string(html_content, output_path, configuration=config, options=options)

print(f"成功生成: {output_path}")

return output_path

except Exception as e:

print(f"生成PDF失败: {e}")

return None

def print_file(filepath):

"""调用系统默认打印机打印文件"""

if not filepath:

return

abs_path = os.path.abspath(filepath)

if SYSTEM == 'Windows':

Windows下使用默认命令打开并打印

os.startfile(abs_path, "print")

print(f"已发送至打印机: {abs_path}")

elif SYSTEM == 'Linux':

Linux下使用lp命令打印

try:

subprocess.run(['lp', abs_path], check=True)

print(f"已发送至打印机: {abs_path}")

except subprocess.CalledProcessError:

print("打印命令执行失败,请检查 cups 服务")

else:

print("macOS 系统暂未实现自动打印脚本,请手动打开文件打印")

def main():

1. 读取数据

try:

with open(DATA_FILE, 'r', encoding='utf-8') as f:

students = json.load(f)

except FileNotFoundError:

print(f"错误:找不到数据文件 {DATA_FILE}")

return

except json.JSONDecodeError:

print(f"错误:{DATA_FILE} 格式不正确")

return

2. 循环处理每个考生

for student in students:

print(f"正在处理考生: {student['name']}...")

渲染 HTML

html_content = render_template(student)

生成 PDF 文件名

pdf_name = f"{student['name']}_{student['exam_id']}.pdf"

生成 PDF

pdf_path = generate_pdf(html_content, pdf_name)

自动打印 (如果需要自动打印,取消下面这行的注释)

print_file(pdf_path)

print("所有任务处理完毕。")

if __name__ == '__main__':

main()

```

执行与验证

代码编写完成后,直接在终端运行脚本:

python auto_print.py

脚本运行后,你会在项目根目录下看到一个名为 tickets 的新文件夹。打开该文件夹,你应该能看到名为“张伟_DA20231001.pdf”和“李娜_DA20231002.pdf”的文件。

验证步骤:

1. 打开任意生成的 PDF 文件,检查边框是否完整,文字是否居中。

2. 确认身份证号、姓名等动态信息是否正确替换。

3. 确认字体是否为宋体(如果系统无宋体,可能会回退到默认字体,可在 HTML 中调整 font-family)。

如果需要直接连接打印机进行批量打印,请编辑 auto_print.py,找到 print_file(pdf_path) 这一行,删除前面的 符号,保存并再次运行脚本即可。

常见问题与排错

在实操过程中,可能会遇到以下两个常见问题,请按对应方案解决:

1. OSError: No wkhtmltopdfx executable found

这代表 Python 找不到 wkhtmltopdf 的可执行文件。

  • Windows: 请检查代码中的路径 C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe 是否与你实际安装位置一致。如果你安装到了 D 盘,必须修改代码中的路径。
  • Linux: 执行 which wkhtmltopdf 检查是否安装成功,如果未安装,请重新执行安装命令。

2. 生成的 PDF 中文显示为乱码或方块

这是典型的字体缺失问题。wkhtmltopdf 在 Linux 服务器上运行时,如果没有安装中文字体,就无法渲染。

  • 解决方法: 在 Linux 服务器上安装中文字体包。例如 CentOS 执行:sudo yum install -y wqy-zenhei-fonts。安装完成后,在 HTML 模板的 font-family 中优先指定该字体。

太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务通常包含需求分析、方案制定、现场整理、扫描加工、数据挂接、验收交付等核心流程,费用根据档案数量、纸张状况、数字化标准等因素综合计算,2026年市场价格范围大致在每页0.5元至2元之间...
2026年08月19日 09:50:23
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818