当前位置: 首页 > news >正文

python生成docx文件

使用python自动生成一张想要的docx文件
在这其中有指纹和公司盖章

from PIL import Image
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt, Inches, Cm
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from xlsxtpl.writerx import BookWriterdef work_experience_word_file(user_info, zip_file_path, middle_name=""):"""创建word文档@param user_info: 用户的基本信息@param zip_file_path: 压缩包地址信息@param middle_name: 为了满足成员附件导出的文件名"""# 创建代表Word文档的Doc对象doc = Document()# 保存文档的地址doc.styles['Normal'].font.name = u'仿宋'doc.styles['Normal'].font.size = Pt(16)doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋')# 标题title_name = '个人从业经历承诺书'title_paragraph = doc.add_paragraph()title_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 居中对齐title_run = title_paragraph.add_run(title_name)title_run.bold = True  # 加粗title_run.font.size = Pt(22)# 换行wrap_str = ''doc.add_paragraph(wrap_str)# 身份信息的填充info_one = '本人'info_one_paragraph = doc.add_paragraph(info_one)user_name = info_one_paragraph.add_run(f' {user_info["name"]} ')user_name.underline = True  # 下划线info_one_paragraph.add_run('于')p_format = info_one_paragraph.paragraph_formatp_format.first_line_indent = Inches(0.4)  # 首行缩进p_format.line_spacing = 1.5  # 设置行间距为 1.5work_start_time = user_info.get("work_start_time").split('-') if user_info.get("work_start_time") else ['', '']work_start_year = info_one_paragraph.add_run(f' {work_start_time[0]} ')work_start_year.underline = True  # 下划线info_two = '年'info_one_paragraph.add_run(info_two)work_start_month = info_one_paragraph.add_run(f' {work_start_time[1]} ')work_start_month.underline = True  # 下划线info_three = '月工作至今,现已从事'info_one_paragraph.add_run(info_three)work_place = info_one_paragraph.add_run(f' {user_info.get("operitem_str") if user_info.get("operitem_str", "") else user_info.get("job_class_str", "")} ')work_place.underline = True  # 下划线info_one_paragraph.add_run('相关工作')work_year = info_one_paragraph.add_run(f' {user_info.get("work_year", "")} ')work_year.underline = True  # 下划线info_one_paragraph.add_run('年。')# 换行wrap_str = ''doc.add_paragraph(wrap_str)# 换行wrap_str = ''doc.add_paragraph(wrap_str)# 培训单位公章info_five = doc.add_paragraph("承诺人:   ( 签名并盖手印 )")info_five_format = info_five.paragraph_formatinfo_five_format.first_line_indent = Inches(0.8)  # 首行缩进p_format.line_spacing = 1.5  # 设置行间距为 1.5info_five.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT# 签名和指纹的地址zw_seal_url = zip_file_path + '/' + user_info['name'] + '指纹文件'zw_path = zw_seal_url + '.png'if os.path.exists(zw_path):add_float_picture(info_five, zw_path, width=Cm(2.0), pos_x=Cm(15.1), pos_y=Cm(9.6))else:zw_path = zw_seal_url + '.jpg'if os.path.exists(zw_path):add_float_picture(info_five, zw_path, width=Cm(2.0), pos_x=Cm(15.1), pos_y=Cm(9.6))qm_seal_url = zip_file_path + '/' + user_info['name'] + '签名文件'qm_path = qm_seal_url + '.png'if os.path.exists(qm_path):add_float_picture(info_five, qm_path, width=Cm(3.0), pos_x=Cm(14.6), pos_y=Cm(9.6))else:qm_path = qm_seal_url + '.jpg'if os.path.exists(zw_path):add_float_picture(info_five, qm_path, width=Cm(3.0), pos_x=Cm(14.6), pos_y=Cm(9.6))# 换行wrap_str = ''doc.add_paragraph(wrap_str)# 盖章日期create_time_list = user_info['createTime'].split('-') if user_info['createTime'] else "   "create_time = f'{create_time_list[0]}{create_time_list[1]}{create_time_list[2]}日'doc.add_paragraph(create_time).alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT  # 右对齐word_file_path = zip_file_path + f'/{middle_name}{user_info["id_card"]}.docx'user_info = {"createTime": "", ...........}
zip_file_path = 'E:/'
work_experience_word_file(user_info, zip_file_path, middle_name="")
http://www.lryc.cn/news/294233.html

相关文章:

  • 网络异常案例四_IP异常
  • Hack The Box-Challenges-Misc-M0rsarchive
  • 验证码倒计时:用户界面的小细节,大智慧
  • Web后端:CSRF攻击及应对方法
  • 【手写数据库toadb】toadb表对象访问操作,存储管理抽象层软件架构设计思想应用
  • SpringBoot使用Rabbit详解含完整代码
  • 深度学习本科课程 实验3 网络优化
  • Eclipse 安装使用ABAPGit
  • std::mutex std::recursive_mutex std::shared_mutex
  • vscode的vetur文档格式化失效
  • idea 快捷键ctrl+shift+f失效的解决方案
  • C++面试:数据库的连接池管理
  • React Hook之钩子调用规则(不在循环、条件判断或者嵌套函数中调用)
  • 深入理解TCP网络协议(3)
  • JavaScript实现归并排序及vscode输出乱码解决
  • Redis面试题40
  • 2024年危险化学品经营单位安全管理人员证考试题库及危险化学品经营单位安全管理人员试题解析
  • Kafka相关内容复习
  • JVM之Java内存区域
  • 几个MySQL系统调优工具
  • Linux内核与驱动面试经典“小”问题集锦(2)
  • windws安装mysql详细步骤
  • Linux的库文件
  • JAVA Web 学习(五)Nginx、RPC、JWT
  • Python编程的十大神奇依赖库
  • Java类的继承
  • 【DC渗透系列】DC-4靶场
  • 开源软件全景解析:驱动技术创新与行业革新的力量
  • 目标检测及相关算法介绍
  • 跟着cherno手搓游戏引擎【20】混合(blend)