方法1
使用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 BookWriter
def 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_format
p_format.first_line_indent = Inches(0.4) # 首行缩进
p_format.line_spacing = 1.5 # 设置行间距为 1.5
work_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_format
info_five_format.first_line_indent = Inches(0.8) # 首行缩进
p_format.line_spacing = 1.5 # 设置行间距为 1.5
info_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="")
方法2
python 生成docx文件第二种方法
from docx import Document
def safe_produce_word(user_info, zip_file_path):
"""
创建安全生产知识和管理能力考核申请表word文档
@param user_info: 用户的基本信息
@param zip_file_path: 压缩包地址信息
"""
# 创建代表Word文档的Doc对象
doc = Document()
# 保存文档的地址
doc.styles['Normal'].font.name = u'等线'
doc.styles['Normal'].font.size = Pt(10)
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(21)
# 生成学习表格
table = doc.add_table(11, 8, style="Table Grid")
# 设置行高
table.rows[0].height = Cm(0.9)
table.rows[1].height = Cm(0.9)
table.rows[2].height = Cm(0.9)
table.rows[3].height = Cm(0.7)
table.rows[4].height = Cm(0.7)
table.rows[5].height = Cm(0.7)
table.rows[6].height = Cm(0.7)
table.rows[7].height = Cm(0.7)
table.rows[8].height = Cm(0.7)
a = table.cell(0, 7)
b = table.cell(2, 7)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(1, 1)
b = table.cell(1, 6)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(0, 1)
b = table.cell(0, 3)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(2, 1)
b = table.cell(2, 3)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(3, 1)
b = table.cell(3, 3)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(4, 1)
b = table.cell(4, 3)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(5, 1)
b = table.cell(5, 3)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(0, 5)
b = table.cell(0, 6)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(2, 5)
b = table.cell(2, 6)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(3, 5)
b = table.cell(3, 7)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(4, 5)
b = table.cell(4, 7)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(5, 5)
b = table.cell(5, 7)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(6, 1)
b = table.cell(6, 7)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(7, 1)
b = table.cell(7, 7)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(8, 1)
b = table.cell(8, 7)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(9, 1)
b = table.cell(9, 7)
# 合并a与b构成的长方形区域
a.merge(b)
a = table.cell(10, 1)
b = table.cell(10, 7)
# 合并a与b构成的长方形区域
a.merge(b)
cell2 = table.cell(0, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中设置
paragraph.add_run('姓名')
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(0, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(user_info['user_name'])
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(0, 4)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中设置
paragraph.add_run('性别')
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(0, 5)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中设置
paragraph.add_run(SEX_DICT.get(user_info['sex'], str(user_info['sex'])))
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(1, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中设置
paragraph.add_run('家庭住址')
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(1, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(user_info['address'])
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(2, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中设置
paragraph.add_run('工作单位')
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(2, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(user_info['company'])
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(2, 4)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中设置
paragraph.add_run('职务')
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(2, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(user_info['duty'])
paragraph.paragraph_format.line_spacing = Pt(19) # 设置行间距
cell2 = table.cell(3, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中设置
paragraph.add_run('身份证件类型')
paragraph.paragraph_format.line_spacing = Pt(13) # 设置行间距
cell2 = table.cell(3, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('\x20\x20\x20\x20\x20\x20身份证\x20\x20\x20\x20\x20\x20\x20\x20军官证\n\x20\x20\x20\x20\x20\x20护照\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20其他')
paragraph.paragraph_format.line_spacing = Pt(13) # 设置行间距
cell2 = table.cell(3, 4)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('证件号码')
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(3, 5)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(user_info['id_card'])
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(4, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中设置
paragraph.add_run('任现职时间')
paragraph.paragraph_format.line_spacing = Pt(13) # 设置行间距
cell2 = table.cell(4, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(user_info['work_start_time'])
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(4, 4)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('联系电话')
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(4, 5)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(user_info['mobile2'] if user_info['mobile2'] else user_info['mobile'])
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(5, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('申请类型')
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(5, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('\x20\x20\x20\x20\x20\x20初次申领\x20\x20\x20\x20\x20\x20\x20复审\n\x20\x20\x20\x20\x20\x20延期复审')
paragraph.paragraph_format.line_spacing = Pt(13) # 设置行间距
cell2 = table.cell(5, 4)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('培训类型')
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(5, 5)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('\x20\x20\x20\x20\x20\x20自主培训\x20\x20\x20\x20\x20\x20\x20\x20委托培训')
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(6, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('最高学历')
paragraph.paragraph_format.line_spacing = Pt(21) # 设置行间距
cell2 = table.cell(6, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('\x20\x20\x20\x20\x20\x20初中\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20中专或同等学历\x20\x20\x20\x20\x20\x20\x20\x20\x20专科或同等学历\n\x20\x20\x20\x20\x20\x20本科或同等学历\x20\x20\x20\x20\x20\x20\x20\x20\x20高中或同等学历\x20\x20\x20\x20\x20\x20\x20\x20\x20研究生及以上')
paragraph.paragraph_format.line_spacing = Pt(13) # 设置行间距
cell2 = table.cell(7, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('行业类别')
paragraph.paragraph_format.line_spacing = Pt(45) # 设置行间距
cell2 = table.cell(7, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('\x20\x20\x20\x20\x20\x20危险化学品生产单位\x20\x20\x20\x20\x20\x20\x20\x20\x20危险化学品经营单位\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20煤矿( )'
'\n\x20\x20\x20\x20\x20\x20煤炭生产经营单位\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20金属非金属( )\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20职业卫生'
'\n\x20\x20\x20\x20\x20\x20烟花爆竹生产单位\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20烟花爆竹经营单位\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20职业健康'
'\n\x20\x20\x20\x20\x20\x20金属冶炼( )\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20陆上石油天然气开采单位'
'\n\x20\x20\x20\x20\x20\x20其他生产经营单位\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20一般行业生产经营单位')
paragraph.paragraph_format.line_spacing = Pt(16) # 设置行间距
cell2 = table.cell(8, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('人员类别')
paragraph.paragraph_format.line_spacing = Pt(16) # 设置行间距
cell2 = table.cell(8, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('\x20\x20\x20\x20\x20\x20主要负责人\x20\x20\x20\x20\x20\x20\x20\x20安全生产管理人员')
paragraph.paragraph_format.line_spacing = Pt(16) # 设置行间距
cell2 = table.cell(9, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('\n\n\n\n申请人承诺事项')
# 报名的日期
end_time_list = user_info.get("enter_time").split("-")
end_time_str = f'{end_time_list[0]} 年 {end_time_list[1]} 月 {end_time_list[2]} 日'
file_template_content = user_info["file_template_content"]
promise_str = ''
exam_str = ''
if file_template_content:
for one_template in file_template_content:
if one_template.get('title') == '申请人承诺事项':
promise_str = one_template.get('content')
if one_template.get('title') == '申请人参加安全培训情况':
exam_str = one_template.get('content')
cell2 = table.cell(9, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(f'\x20\x20\x20\x20{promise_str}')
paragraph.add_run('\n\t\t\t\t承诺及申请人(签名并按指纹) :')
paragraph.add_run(f'\n\t\t\t\t\t\t\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{end_time_str}')
paragraph.paragraph_format.line_spacing = Pt(18) # 设置行间距
cell2 = table.cell(10, 0)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run('\n\n\n申请人参加安全培训情况(此栏由委托培训单位填写)')
cell2 = table.cell(10, 1)
paragraph = cell2.paragraphs[0]
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 居中设置
paragraph.add_run(f'\x20\x20\x20\x20\x20\x20{exam_str}')
paragraph.add_run(f'\n培训单位名称: {user_info["organization_name"]}')
paragraph.add_run(f'\n培训地点: {user_info["organization_address"]}')
paragraph.add_run(f'\n培训起止日期: {user_info["start_time"]} ~ {user_info["end_time"]} 培训学时: {int(user_info["study_times"]) + int(user_info["practical_times"])}学时')
paragraph.add_run('\n培训单位负责人(签字) :\t\t\t\x20\x20\x20公章:')
paragraph.add_run(f'\n\t\t\t\t\t\t\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{end_time_str}')
paragraph.paragraph_format.line_spacing = Pt(18) # 设置行间距
info_four = '备注:申请人提交该申请表时,还应当提供本人的身份证复印件、学历证书复印件等有关材料,并签字按指纹予以确认。'
info_four_paragraph = doc.add_paragraph()
info_four_paragraph.paragraph_format.line_spacing = Pt(12) # 设置行间距
four_run = info_four_paragraph.add_run(info_four)
four_run.font.size = Pt(8)
# 选择狂图片的地址
project_dir = os.path.abspath('.')
select_icon_url = project_dir + '/app/static/default/select_icon.png'
unselect_icon_url = project_dir + '/app/static/default/unselect_icon.png'
# 标准照
fzr_seal_url = zip_file_path + '/' + user_info['name'] + '标准照'
bzz_icon_url = fzr_seal_url + '.png'
if os.path.exists(bzz_icon_url):
add_float_picture(info_four_paragraph, bzz_icon_url, width=Cm(1.88), pos_x=Cm(16.3), pos_y=Cm(3.91))
else:
bzz_icon_url = fzr_seal_url + '.jpg'
if os.path.exists(bzz_icon_url):
add_float_picture(info_four_paragraph, bzz_icon_url, width=Cm(1.88), pos_x=Cm(16.3), pos_y=Cm(3.91))
# 身份证件类型
id_type = user_info['id_type']
id_card_icon_url = unselect_icon_url
officer_icon_url = unselect_icon_url
passport_icon_url = unselect_icon_url
other_icon_url = unselect_icon_url
if id_type == '身份证':
id_card_icon_url = select_icon_url
elif id_type == '军官证':
officer_icon_url = select_icon_url
elif id_type == '护照':
passport_icon_url = select_icon_url
else:
other_icon_url = select_icon_url
add_float_picture(info_four_paragraph, id_card_icon_url, width=Cm(0.3), pos_x=Cm(5.25), pos_y=Cm(6.71))
add_float_picture(info_four_paragraph, officer_icon_url, width=Cm(0.3), pos_x=Cm(7.15), pos_y=Cm(6.71))
add_float_picture(info_four_paragraph, passport_icon_url, width=Cm(0.3), pos_x=Cm(5.25), pos_y=Cm(7.16))
add_float_picture(info_four_paragraph, other_icon_url, width=Cm(0.3), pos_x=Cm(7.15), pos_y=Cm(7.16))
# 申请类型
first_icon_url = unselect_icon_url
second_icon_url = unselect_icon_url
last_icon_url = unselect_icon_url
train_type = user_info['train_type']
if train_type == 0:
first_icon_url = select_icon_url
elif train_type == 1:
second_icon_url = select_icon_url
else:
last_icon_url = select_icon_url
add_float_picture(info_four_paragraph, first_icon_url, width=Cm(0.3), pos_x=Cm(5.2), pos_y=Cm(8.58))
add_float_picture(info_four_paragraph, second_icon_url, width=Cm(0.3), pos_x=Cm(7.45), pos_y=Cm(8.58))
add_float_picture(info_four_paragraph, last_icon_url, width=Cm(0.3), pos_x=Cm(5.2), pos_y=Cm(9.03))
# 培训类型
myself_icon_url = unselect_icon_url
entrust_icon_url = unselect_icon_url
training_mode = user_info['training_mode']
if training_mode == '自主培训':
myself_icon_url = select_icon_url
else:
entrust_icon_url = select_icon_url
add_float_picture(info_four_paragraph, myself_icon_url, width=Cm(0.3), pos_x=Cm(12.82), pos_y=Cm(8.8))
add_float_picture(info_four_paragraph, entrust_icon_url, width=Cm(0.3), pos_x=Cm(15.1), pos_y=Cm(8.8))
# 最高学历
educate_icon_url1 = unselect_icon_url
educate_icon_url2 = unselect_icon_url
educate_icon_url3 = unselect_icon_url
educate_icon_url4 = unselect_icon_url
educate_icon_url5 = unselect_icon_url
educate_icon_url6 = unselect_icon_url
education = user_info['education']
if education == '初中':
educate_icon_url1 = select_icon_url
elif education == '中专或同等学历':
educate_icon_url2 = select_icon_url
elif education == '专科或同等学历':
educate_icon_url3 = select_icon_url
elif education == '本科或同等学历':
educate_icon_url4 = select_icon_url
elif education == '高中或同等学历':
educate_icon_url5 = select_icon_url
elif education == '研究生及以上':
educate_icon_url6 = select_icon_url
add_float_picture(info_four_paragraph, educate_icon_url1, width=Cm(0.3), pos_x=Cm(5.3), pos_y=Cm(9.52))
add_float_picture(info_four_paragraph, educate_icon_url2, width=Cm(0.3), pos_x=Cm(8.71), pos_y=Cm(9.52))
add_float_picture(info_four_paragraph, educate_icon_url3, width=Cm(0.3), pos_x=Cm(12.15), pos_y=Cm(9.52))
add_float_picture(info_four_paragraph, educate_icon_url4, width=Cm(0.3), pos_x=Cm(5.3), pos_y=Cm(9.98))
add_float_picture(info_four_paragraph, educate_icon_url5, width=Cm(0.3), pos_x=Cm(8.71), pos_y=Cm(9.98))
add_float_picture(info_four_paragraph, educate_icon_url6, width=Cm(0.3), pos_x=Cm(12.15), pos_y=Cm(9.98))
# 行业类别
job_icon_url1 = unselect_icon_url
job_icon_url2 = unselect_icon_url
job_icon_url3 = unselect_icon_url
job_icon_url4 = unselect_icon_url
job_icon_url5 = unselect_icon_url
job_icon_url6 = unselect_icon_url
job_icon_url7 = unselect_icon_url
job_icon_url8 = unselect_icon_url
job_icon_url9 = unselect_icon_url
job_icon_url10 = unselect_icon_url
job_icon_url11 = unselect_icon_url
job_icon_url12 = unselect_icon_url
job_icon_url13 = unselect_icon_url
job_class_str = user_info['job_class_str']
if job_class_str == '危险化学品生产单位':
job_icon_url1 = select_icon_url
elif job_class_str == '煤炭生产经营单位':
job_icon_url2 = select_icon_url
elif job_class_str == '烟花爆竹生产单位':
job_icon_url3 = select_icon_url
elif '金属冶炼' in job_class_str:
job_icon_url4 = select_icon_url
elif job_class_str == '其他生产经营单位':
job_icon_url5 = select_icon_url
elif job_class_str == '危险化学品经营单位':
job_icon_url6 = select_icon_url
elif '金属非金属' in job_class_str:
job_icon_url7 = select_icon_url
elif job_class_str == '烟花爆竹经营单位':
job_icon_url8 = select_icon_url
elif job_class_str == '陆上石油天然气开采单位':
job_icon_url9 = select_icon_url
elif job_class_str == '一般行业生产经营单位':
job_icon_url10 = select_icon_url
elif '煤矿' in job_class_str:
job_icon_url11 = select_icon_url
elif job_class_str == '职业卫生':
job_icon_url12 = select_icon_url
else:
job_icon_url13 = select_icon_url
add_float_picture(info_four_paragraph, job_icon_url1, width=Cm(0.3), pos_x=Cm(5.2), pos_y=Cm(10.5))
add_float_picture(info_four_paragraph, job_icon_url2, width=Cm(0.3), pos_x=Cm(5.2), pos_y=Cm(11.09))
add_float_picture(info_four_paragraph, job_icon_url3, width=Cm(0.3), pos_x=Cm(5.2), pos_y=Cm(11.65))
add_float_picture(info_four_paragraph, job_icon_url4, width=Cm(0.3), pos_x=Cm(5.2), pos_y=Cm(12.22))
add_float_picture(info_four_paragraph, job_icon_url5, width=Cm(0.3), pos_x=Cm(5.2), pos_y=Cm(12.77))
add_float_picture(info_four_paragraph, job_icon_url6, width=Cm(0.3), pos_x=Cm(9.4), pos_y=Cm(10.5))
add_float_picture(info_four_paragraph, job_icon_url7, width=Cm(0.3), pos_x=Cm(9.4), pos_y=Cm(11.09))
add_float_picture(info_four_paragraph, job_icon_url8, width=Cm(0.3), pos_x=Cm(9.4), pos_y=Cm(11.65))
add_float_picture(info_four_paragraph, job_icon_url9, width=Cm(0.3), pos_x=Cm(9.4), pos_y=Cm(12.22))
add_float_picture(info_four_paragraph, job_icon_url10, width=Cm(0.3), pos_x=Cm(9.4), pos_y=Cm(12.77))
add_float_picture(info_four_paragraph, job_icon_url11, width=Cm(0.3), pos_x=Cm(13.7), pos_y=Cm(10.5))
add_float_picture(info_four_paragraph, job_icon_url12, width=Cm(0.3), pos_x=Cm(13.7), pos_y=Cm(11.09))
add_float_picture(info_four_paragraph, job_icon_url13, width=Cm(0.3), pos_x=Cm(13.7), pos_y=Cm(11.65))
# 人员类别
fzr_icon_url = unselect_icon_url
safe_icon_url = unselect_icon_url
qual_type_str = user_info['qual_type_str']
if '主要负责人' in qual_type_str:
fzr_icon_url = select_icon_url
else:
safe_icon_url = select_icon_url
add_float_picture(info_four_paragraph, fzr_icon_url, width=Cm(0.3), pos_x=Cm(5.2), pos_y=Cm(13.37))
add_float_picture(info_four_paragraph, safe_icon_url, width=Cm(0.3), pos_x=Cm(7.8), pos_y=Cm(13.37))
# 签名和指纹
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_four_paragraph, zw_path, width=Cm(2.0), pos_x=Cm(15.5), pos_y=Cm(16.3))
else:
zw_path = zw_seal_url + '.jpg'
if os.path.exists(zw_path):
add_float_picture(info_four_paragraph, zw_path, width=Cm(2.0), pos_x=Cm(15.5), pos_y=Cm(16.3))
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_four_paragraph, qm_path, width=Cm(3.0), pos_x=Cm(15.5), pos_y=Cm(16.3))
else:
qm_path = qm_seal_url + '.jpg'
if os.path.exists(qm_path):
add_float_picture(info_four_paragraph, qm_path, width=Cm(3.0), pos_x=Cm(15.5), pos_y=Cm(16.3))
# 公司盖章和负责人签名
fzr_seal_url = zip_file_path + '/' + user_info['name'] + '负责人签名'
fzr_qm_path = fzr_seal_url + '.png'
if os.path.exists(fzr_qm_path):
add_float_picture(info_four_paragraph, fzr_qm_path, width=Cm(4.0), pos_x=Cm(8.2), pos_y=Cm(20.6))
else:
fzr_qm_path = fzr_seal_url + '.jpg'
if os.path.exists(fzr_qm_path):
add_float_picture(info_four_paragraph, fzr_qm_path, width=Cm(4.0), pos_x=Cm(8.2), pos_y=Cm(20.6))
company_seal_url = zip_file_path + '/' + user_info['name'] + '公司盖章'
company_zw_path = company_seal_url + '.png'
if os.path.exists(company_zw_path):
add_float_picture(info_four_paragraph, company_zw_path, width=Cm(4.2), pos_x=Cm(12.5), pos_y=Cm(20.3))
else:
company_zw_path = company_seal_url + '.jpg'
if os.path.exists(company_zw_path):
add_float_picture(info_four_paragraph, company_zw_path, width=Cm(4.2), pos_x=Cm(12.5), pos_y=Cm(20.3))
word_file_path = zip_file_path + f'/{user_info["id_card"]}.docx'
user_info = {'name': '张三', .......................}
zip_file_path = 'E:/'
safe_produce_word(user_info, zip_file_path)