python生成docx文件

方法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)
  • 57
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值