手动制作几十上百张名片是不是超崩溃?重复复制粘贴、调整字体对齐到眼瞎,还总怕漏改姓名/职位——最后出来的名片格式还参差不齐……
今天给大家分享一个「效率神器」:用几行python代码,从excel导入员工信息,一键批量生成标准统一的pdf名片。不用懂复杂编程,跟着步骤走,小白也能10分钟上手!
一、先看效果:10秒生成50张标准名片
只要提前把员工信息整理成excel表格(公司、姓名、部门、职位、电话),运行代码后,直接输出a4格式的pdf——每张a4纸上自动排列8张名片(2列4行),打印后裁剪就能用,格式100%统一!
excel数据示例(列名必须和下面一致,不能错!):
公司 | 姓名 | 部门 | 职位 | 电话 |
---|---|---|---|---|
某某科技有限公司 | 张三 | 产品部 | 产品经理 | 138xxxx1234 |
某某科技有限公司 | 李四 | 技术部 | 前端开发 | 139xxxx5678 |
某某科技有限公司 | 王五 | 行政部 | 行政专员 | 137xxxx9012 |
生成的pdf名片效果:
浅灰色背景+蓝色分隔线,公司名、姓名、职位清晰排版,没有多余杂乱格式,打印裁剪后就是标准名片(约90mm×54mm,代码中可调整尺寸)。
二、核心原理:3个步骤搞定批量生成
这套代码的逻辑很简单,本质是「读数据→定格式→画名片」,核心分3个模块,我们不用深究代码细节,知道怎么用就行!
1. 准备工作:2件事要提前做
在运行代码前,先完成这2步,避免踩坑:
(1)整理excel员工信息
按照上面的表格格式,把需要做名片的员工信息填好,保存为employee_data.xlsx
(名字可以改,但后面代码里要对应)。
重点:列名必须是“公司”“姓名”“部门”“职位”“电话”,少一个或错一个,代码都会报错!
(2)安装依赖库
代码需要3个python库来实现“读excel”“画pdf”“找字体”,打开电脑的「命令提示符」(windows)或「终端」(mac),复制粘贴下面的命令,按回车安装:
pip install pandas reportlab matplotlib
如果提示“pip不是内部命令”,百度搜“python添加环境变量”,简单设置下就行。
2. 代码解析:关键功能看这里
下面是完整代码(可以直接复制用),我标了重点,告诉大家哪些地方可以改,哪些不能动:
# 导入pandas库,用于数据处理和excel文件读取 import pandas as pd # 从reportlab库中导入a4页面尺寸 from reportlab.lib.pagesizes import a4 # 从reportlab库中导入canvas模块,用于创建pdf文档 from reportlab.pdfgen import canvas # 从reportlab库中导入pdfmetrics模块,用于字体度量 from reportlab.pdfbase import pdfmetrics # 从reportlab库中导入ttfont类,用于处理truetype字体 from reportlab.pdfbase.ttfonts import ttfont # 从reportlab库中导入hexcolor类,用于使用十六进制颜色代码 from reportlab.lib.colors import hexcolor # 导入os模块,用于文件系统操作 import os # 导入platform模块,用于获取系统信息 import platform # 导入matplotlib的字体管理器,用于查找系统字体 import matplotlib.font_manager as fm # 定义函数,获取系统中的中文字体 def get_chinese_font(): # 获取当前操作系统名称 system = platform.system() # 初始化字体列表 fonts = [] # 定义常见中文字体路径列表 common_chinese_fonts = [ # windows 常用中文字体 'c:/windows/fonts/simhei.ttf', # 黑体 'c:/windows/fonts/simsun.ttc', # 宋体 'c:/windows/fonts/simkai.ttf', # 楷体 'c:/windows/fonts/msyh.ttf', # 微软雅黑 # macos 常用中文字体 '/system/library/fonts/pingfang.ttc', # 苹方 '/library/fonts/arial unicode.ttf', # linux 常用中文字体 '/usr/share/fonts/truetype/arphic/uming.ttc', '/usr/share/fonts/truetype/droid/droidsansfallbackfull.ttf', ] # 遍历常见中文字体路径列表 for font_path in common_chinese_fonts: # 检查字体文件是否存在 if os.path.exists(font_path): # 如果存在,返回字体路径 return font_path # 如果上面的字体都不存在,尝试从matplotlib获取系统字体 try: # 获取系统中所有存在的字体路径 fonts = [f for f in fm.findsystemfonts() if os.path.exists(f)] # 遍历所有字体 for font in fonts: try: # 检查字体名称中是否包含非ascii字符(即中文字符) if any([true for c in fm.fontproperties(fname=font).get_name() if ord(c) > 127]): # 如果找到中文字体,返回字体路径 return font except: # 如果处理出错,继续检查下一个字体 continue except: # 如果获取系统字体出错,忽略错误 pass # 如果找不到中文字体,返回none return none # 定义函数,读取excel数据 def read_excel(file_path): try: # 使用pandas读取excel文件 df = pd.read_excel(file_path) # 返回数据框 return df except exception as e: # 如果读取出错,打印错误信息 print(f"读取excel文件时出错: {e}") # 返回none return none # 定义函数,创建pdf名片 def create_business_cards(df, output_file): # 获取中文字体路径 chinese_font_path = get_chinese_font() # 检查是否找到中文字体 if chinese_font_path: # 设置字体名称 font_name = 'chinesefont' # 注册中文字体 pdfmetrics.registerfont(ttfont(font_name, chinese_font_path)) # 打印使用的字体路径 print(f"使用中文字体: {chinese_font_path}") else: # 如果找不到中文字体,使用默认字体 font_name = 'helvetica' # 默认字体 # 打印警告信息 print("警告: 找不到中文字体,中文可能显示为乱码") # 创建pdf文档,使用a4页面大小 c = canvas.canvas(output_file, pagesize=a4) # 获取a4页面的宽度和高度 width, height = a4 # 设置名片尺寸和布局参数 card_width = 250 # 名片宽度 card_height = 150 # 名片高度 margin = 20 # 边距 cards_per_row = 2 # 每行名片数量 cards_per_column = 4 # 每列名片数量 # 遍历数据框中的每一行 for i, record in df.iterrows(): # 计算当前名片在页面中的位置 row_num = i % (cards_per_row * cards_per_column) col = row_num % cards_per_row # 计算列位置 row = row_num // cards_per_row # 计算行位置 # 计算名片在页面上的x坐标 x = margin + col * (card_width + margin) # 计算名片在页面上的y坐标 y = height - margin - (row + 1) * card_height - row * margin # 检查是否需要添加新页面 if row_num == 0 and i > 0: # 添加新页面 c.showpage() # 绘制名片背景 c.setfillcolor(hexcolor('#f8f8f8')) # 设置填充颜色 c.roundrect(x, y, card_width, card_height, 5, fill=1, stroke=0) # 绘制圆角矩形 # 绘制名片边框 c.setstrokecolor(hexcolor('#cccccc')) # 设置边框颜色 c.setlinewidth(0.5) # 设置边框宽度 c.roundrect(x, y, card_width, card_height, 5, fill=0, stroke=1) # 绘制圆角矩形边框 # 绘制公司名称 c.setfillcolor(hexcolor('#2c3e50')) # 设置文字颜色 c.setfont(font_name, 14) # 设置字体和大小 company = str(record['公司']) # 获取公司名称 c.drawstring(x + 15, y + card_height - 25, company) # 在名片上绘制公司名称 # 绘制分隔线 c.setstrokecolor(hexcolor('#3498db')) # 设置线条颜色 c.setlinewidth(1) # 设置线条宽度 c.line(x + 15, y + card_height - 35, x + card_width - 15, y + card_height - 35) # 绘制分隔线 # 绘制姓名(较大字体) c.setfillcolor(hexcolor('#2c3e50')) # 设置文字颜色 c.setfont(font_name, 12) # 设置字体和大小 name = str(record['姓名']) # 获取姓名 c.drawstring(x + 15, y + card_height - 60, f"姓名:{name}") # 在名片上绘制姓名 # 绘制其他信息 c.setfont(font_name, 10) # 设置字体和大小 c.setfillcolor(hexcolor('#555555')) # 设置文字颜色 department = str(record['部门']) # 获取部门 c.drawstring(x + 15, y + card_height - 80, f"部门:{department}") # 在名片上绘制部门 position = str(record['职位']) # 获取职位 c.drawstring(x + 15, y + card_height - 100, f"职位:{position}") # 在名片上绘制职位 phone = str(record['电话']) # 获取电话 c.drawstring(x + 15, y + card_height - 120, f"电话:{phone}") # 在名片上绘制电话 # 保存pdf文件 c.save() # 打印成功信息 print(f"名片已生成到文件: {output_file}") # 主程序入口 if __name__ == "__main__": # 指定excel文件路径 excel_file = "employee_data.xlsx" # 请根据实际情况修改 # 指定输出pdf文件路径 pdf_file = "员工名片1.pdf" # 读取excel数据 data = read_excel(excel_file) # 检查是否成功读取数据 if data is not none: # 创建名片 create_business_cards(data, pdf_file)
3. 一步一步用:小白也能会
1.复制代码:把上面的代码复制到记事本里,然后把文件后缀改成.py
(比如生成名片.py
)。
2.改路径:打开.py
文件,找到if __name__ == "__main__":
下面的两行:
excel_file
:改成你的excel文件的完整路径(比如"d:/工作/员工信息.xlsx"
);pdf_file
:改成你想保存pdf的路径(比如"d:/工作/新员工名片.pdf"
)。- 路径里的斜杠要写
/
,不是\
!比如c:/files/
,不是c:\files\
。
3.运行代码:双击.py
文件,或在终端里输入python 生成名片.py
,等待几秒。
4.看结果:如果提示“搞定!名片在:xxx”,就去对应的路径找pdf;如果出错,看提示(比如“读excel出错”,可能是excel路径错了)。
三、避坑指南:这些问题别踩
1.中文乱码:
代码会自动找中文字体,如果还是乱码,手动指定字体路径:
找到common_chinese_fonts
列表,在里面加一行你电脑里的中文字体路径(比如windows的c:/windows/fonts/msyh.ttc
,mac的/library/fonts/华文黑体.ttf
)。
2.excel列名错了:
必须是“公司”“姓名”“部门”“职位”“电话”,少一个字、多一个字都不行(比如“公司名称”就会报错)。
3.pdf保存不了:
检查pdf_file
的路径是否存在(比如你写了"d:/工作/名片.pdf"
,但“工作”文件夹不存在,就会保存失败),先建好文件夹再运行。
4.想改名片样式:
- 改尺寸:调
card_width
和card_height
(比如想做更大的名片,改成card_width=300
,card_height=180
); - 改颜色:把
hexcolor('#xxx')
里的xxx
换成颜色代码(百度“颜色代码查询”,比如红色是#ff0000
); - 加logo:在画背景后加一行
c.drawimage("logo.png", x+15, y+10, width=50, height=50)
,把logo.png
换成你的logo路径和尺寸。
以上就是使用python实现一键批量生成员工名片的详细内容,更多关于python生成员工名片的资料请关注代码网其它相关文章!
发表评论