Python基于python-docx实现的本科毕业论文自动排版工具

 更新时间:2026年06月05日 09:45:45   作者:梦因you而美  
写本科毕业论文的时候,你是不是也遇到过这些崩溃的问题:改格式改到凌晨?标题、正文、图表、页眉页脚,调了半天还是不符合学校要求?今天给大家分享一个我写的本科毕业论文自动生成工具,基于python-docx实现,一键生成标准格式论文,需要的朋友可以参考下

一、引言:本科写论文的排版痛点

写本科毕业论文的时候,你是不是也遇到过这些崩溃的问题:

  • 改格式改到凌晨?标题、正文、图表、页眉页脚,调了半天还是不符合学校要求?
  • 运行代码的时候,Word开着就报错,改完代码忘了关Word,白跑一遍?
  • 中文字体在Word里不生效?英文和中文字体不统一?

今天给大家分享一个我写的本科毕业论文自动生成工具,基于python-docx实现,一键生成标准格式论文,所有格式自动搞定,直接就能用!

二、核心功能:全要素自动排版,符合高校规范

这个工具已经把高校本科论文的所有格式要求都内置好了,你只需要填内容就行:

论文基础结构自动生成

  • 封面总标题:黑体二号、居中、段前/段后间距自动设置
  • 摘要+关键词:黑体标题、宋体正文、1.5倍行距、首行缩进
  • 原生1-3级标题:Word原生标题,支持目录自动识别,格式完全符合规范
  • 正文:宋体小四、1.5倍行距、首行缩进2字符,自动排版

论文专用分节符

  • 封面/摘要/目录/正文自动分节,支持独立设置页眉页脚
  • 完美解决“页码从正文开始编号”的学术规范要求

自动页眉页脚+页码

  • 页眉自动居中,页脚自动生成居中页码,打开Word直接显示
  • 不用手动设置,代码自动搞定

文件占用安全检测

  • 自动检测Word/WPS是否打开了目标文件
  • 若文件被占用,直接提示关闭,杜绝PermissionError权限报错

图表自动排版

  • 图片自动居中,题注宋体小五居中
  • 表格自动加边框,题注自动排版

目录一键刷新

  • 插入目录占位符,打开Word选中按F9,自动生成完整目录,支持页码跳转

三、技术实现:解决Word的各种兼容问题

这个工具解决了很多python-docx的原生兼容问题:

  1. 中文字体兼容:通过w:eastAsia命名空间,解决Word中文字体不生效的问题
  2. 分节符实现:用add_section()实现论文专用下一页分节符
  3. 自动页码:通过Word域代码,实现自动页码,不用手动设置
  4. 文件占用检测:通过psutil遍历系统进程,检测文件是否被占用
  5. 原生标题:用add_heading()生成原生标题,支持Word自动识别目录

四、使用教程:3步搞定论文排版

1. 安装依赖

pip install python-docx psutil

2. 运行代码

你只需要把自己的论文内容填到代码里,运行就行,工具会自动帮你排版:

  • 封面标题:add_title()
  • 摘要:add_abstract()
  • 分节符:add_section_break()
  • 三级标题:add_h1()/add_h2()/add_h3()
  • 正文:add_body()
  • 图片:add_image()
  • 表格:add_table()
  • 页眉页脚:set_header_footer()

3. 打开Word刷新目录

运行完成后,打开生成的Word,选中目录,按F9,自动生成完整目录,搞定!

五、完整代码

# -*- coding: utf-8 -*-
"""
本科毕业论文自动化生成系统
核心功能:
    1. 论文封面、摘要、关键词、原生1-3级标题标准化排版
    2. 正文、图片、表格、图表题注自动排版
    3. 分节符/分页符、页眉、页脚(居中页码)自动生成
    4. 文件占用检测,防止Word打开时写入报错
    5. 目录占位符(Word按F9刷新)
格式标准:严格符合高校本科毕业论文格式规范
技术实现:基于python-docx操作Word文档,支持分节、原生标题、域代码
"""
import os
import time
import psutil
from docx import Document
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
class ThesisGenerator:
    """
    本科论文文档生成核心类
    封装论文排版、格式设置、元素插入、文件安全检测等全流程功能
    采用Word原生标题样式,支持分节符、自动页码
    Attributes:
        save_path (str): 论文docx文件保存路径
        doc (Document): python-docx文档操作对象
        font_cn (str): 论文默认中文字体,固定为宋体
        font_en (str): 论文默认西文字体,固定为Times New Roman
    """
    def __init__(self, save_path: str) -> None:
        """
        初始化论文生成器,执行文件安全检测并创建/加载文档
        Args:
            save_path: 论文文档的保存路径,必须为.docx格式
        """
        # 初始化文档保存路径
        self.save_path = save_path
        # 检测文件是否被Word/WPS占用,避免权限错误
        self._check_file_occupied()
        # 加载已有文档或创建空白文档
        self.doc = Document(save_path) if os.path.exists(save_path) else Document()
        # 学术论文标准字体配置
        self.font_cn = "宋体"
        self.font_en = "Times New Roman"
    def _check_file_occupied(self) -> None:
        """
        私有方法:检测目标文件是否被Word/WPS等程序占用
        若文件被打开,输出提示信息并终止程序,防止写入失败
        Raises:
            SystemExit: 文件被占用时退出程序
        """
        # 文件不存在则直接返回
        if not os.path.exists(self.save_path):
            return
        # 获取目标文件名
        target_file = os.path.basename(self.save_path)
        # 遍历系统进程检测文件占用状态
        for proc in psutil.process_iter(['name', 'open_files']):
            try:
                # 跳过无打开文件的进程
                if proc.info['open_files'] is None:
                    continue
                # 匹配被打开的文件
                for f in proc.info['open_files']:
                    if target_file in f.path:
                        print(f"❌ 错误:文件 {self.save_path} 已被【{proc.name()}】打开!")
                        print("请关闭Word/WPS后重新运行程序!")
                        time.sleep(3)
                        exit(1)
            except Exception:
                # 忽略系统进程权限异常
                continue
    def _set_font_style(self, run, cn_font: str, en_font: str, size: int, bold: bool = False) -> None:
        """
        私有通用字体设置方法,解决Word中文字体不生效的兼容问题
        Args:
            run: 文档文本运行对象(文字载体)
            cn_font: 中文字体名称
            en_font: 西文字体名称
            size: 字体大小,单位:磅
            bold: 是否加粗,True=加粗,False=不加粗,默认False
        """
        # 设置西文字体
        run.font.name = en_font
        # 兼容设置中文字体(Word核心修复)
        run._element.rPr.rFonts.set(qn('w:eastAsia'), cn_font)
        # 设置字体大小
        run.font.size = Pt(size)
        # 设置加粗属性
        run.font.bold = bold
    def add_section_break(self) -> None:
        """
        插入【分节符(下一页)】
        论文专用:实现封面/摘要/目录/正文分节,支持独立设置页眉页脚、页码起始
        替代普通分页符,符合高校论文格式规范
        """
        # 添加分节符,新节从下一页开始
        self.doc.add_section()
    def add_title(self, text: str) -> None:
        """
        添加论文封面总标题
        格式规范:黑体二号(22pt)、居中对齐、加粗、段前30磅/段后20磅
        Args:
            text: 论文总标题文本内容
        """
        # 创建段落
        para = self.doc.add_paragraph()
        # 添加文字
        run = para.add_run(text)
        # 设置字体样式
        self._set_font_style(run, "黑体", self.font_en, 22, bold=True)
        # 段落居中对齐
        para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        # 设置段落段前间距
        para.paragraph_format.space_before = Pt(30)
        # 设置段落段后间距
        para.paragraph_format.space_after = Pt(20)
    def add_abstract(self, abstract_text: str, keywords: list) -> None:
        """
        添加论文摘要与关键词
        格式规范:摘要标题黑体14pt居中,正文宋体12pt、1.5倍行距、首行缩进
        Args:
            abstract_text: 摘要正文内容
            keywords: 关键词列表,如['Python', '办公自动化']
        """
        # 1. 添加摘要标题
        title_para = self.doc.add_paragraph()
        t_run = title_para.add_run("摘  要")
        self._set_font_style(t_run, "黑体", self.font_en, 14, True)
        title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        # 2. 添加摘要正文
        body_para = self.doc.add_paragraph()
        b_run = body_para.add_run(abstract_text)
        self._set_font_style(b_run, self.font_cn, self.font_en, 12)
        # 首行缩进2字符
        body_para.paragraph_format.first_line_indent = Cm(0.74)
        # 设置1.5倍行距
        body_para.paragraph_format.line_spacing_rule = WD_LINE_SPACING.MULTIPLE
        body_para.paragraph_format.line_spacing = 1.5
        # 3. 添加关键词
        key_para = self.doc.add_paragraph()
        k_run = key_para.add_run(f"关键词:{';'.join(keywords)}")
        self._set_font_style(k_run, self.font_cn, self.font_en, 12, True)
    def add_h1(self, text: str) -> None:
        """
        添加Word原生一级标题(level=1)
        格式规范:黑体小三(15pt)、居中、加粗、段前12磅/段后6磅
        支持Word目录自动识别
        Args:
            text: 一级标题文本内容
        """
        # 创建原生一级标题
        para = self.doc.add_heading(text, level=1)
        # 获取标题文字对象
        run = para.runs[0]
        # 设置字体样式
        self._set_font_style(run, "黑体", self.font_en, 15, True)
        # 居中对齐
        para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        # 设置段落间距
        para.paragraph_format.space_before = Pt(12)
        para.paragraph_format.space_after = Pt(6)
    def add_h2(self, text: str) -> None:
        """
        添加Word原生二级标题(level=2)
        格式规范:黑体四号(14pt)、左对齐、加粗
        支持Word目录自动识别
        Args:
            text: 二级标题文本内容
        """
        # 创建原生二级标题
        para = self.doc.add_heading(text, level=2)
        run = para.runs[0]
        self._set_font_style(run, "黑体", self.font_en, 14, True)
        # 左对齐
        para.alignment = WD_ALIGN_PARAGRAPH.LEFT
    def add_h3(self, text: str) -> None:
        """
        添加Word原生三级标题(level=3)
        格式规范:宋体小四(12pt)、左对齐、加粗
        支持Word目录自动识别
        Args:
            text: 三级标题文本内容
        """
        # 创建原生三级标题
        para = self.doc.add_heading(text, level=3)
        run = para.runs[0]
        self._set_font_style(run, self.font_cn, self.font_en, 12, True)
        # 左对齐
        para.alignment = WD_ALIGN_PARAGRAPH.LEFT
    def add_body(self, text: str) -> None:
        """
        添加论文正文段落
        格式规范:宋体小四(12pt)、1.5倍行距、首行缩进2字符、左对齐
        Args:
            text: 正文内容文本
        """
        para = self.doc.add_paragraph()
        run = para.add_run(text)
        self._set_font_style(run, self.font_cn, self.font_en, 12)
        # 首行缩进
        para.paragraph_format.first_line_indent = Cm(0.74)
        # 1.5倍行距
        para.paragraph_format.line_spacing_rule = WD_LINE_SPACING.MULTIPLE
        para.paragraph_format.line_spacing = 1.5
        # 左对齐
        para.alignment = WD_ALIGN_PARAGRAPH.LEFT
    def add_image(self, img_path: str, caption: str, width_cm: float = 12) -> None:
        """
        插入图片并添加居中题注
        格式规范:图片居中,题注宋体小五(10pt)居中
        Args:
            img_path: 本地图片完整路径
            caption: 图片题注,如:图1 系统架构图
            width_cm: 图片宽度,单位:厘米,默认12cm
        """
        # 图片不存在则添加提示文本
        if not os.path.exists(img_path):
            self.add_body(f"【图片未找到】{img_path}")
            return
        # 插入图片并设置宽度
        self.doc.add_picture(img_path, width=Cm(width_cm))
        # 最后一个段落(图片)居中对齐
        self.doc.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER
        # 添加图片题注
        cap_para = self.doc.add_paragraph()
        cap_run = cap_para.add_run(caption)
        self._set_font_style(cap_run, self.font_cn, self.font_en, 10)
        cap_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
    def add_table(self, caption: str, rows: int, cols: int, data: list) -> None:
        """
        插入表格并添加居中题注
        格式规范:表格带边框,题注宋体小五(10pt)居中
        Args:
            caption: 表格题注,如:表1 实验数据对比
            rows: 表格总行数
            cols: 表格总列数
            data: 表格数据,二维列表格式
        """
        # 添加表格题注
        cap_para = self.doc.add_paragraph()
        cap_run = cap_para.add_run(caption)
        self._set_font_style(cap_run, self.font_cn, self.font_en, 10)
        cap_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        # 创建带边框表格
        table = self.doc.add_table(rows=rows, cols=cols, style="Table Grid")
        # 循环填充表格数据
        for i in range(rows):
            for j in range(cols):
                table.cell(i, j).text = data[i][j]
    def add_toc(self) -> None:
        """
        插入目录占位符
        使用方式:打开Word后选中目录 → 按F9键自动生成完整目录
        格式规范:目录标题黑体14pt居中
        """
        # 目录标题
        para = self.doc.add_paragraph()
        run = para.add_run("目  录")
        self._set_font_style(run, "黑体", self.font_en, 14, True)
        para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        # 生成目录操作提示
        self.doc.add_paragraph("操作提示:打开Word → 选中本段落 → 按 F9 自动生成目录")
    def set_header_footer(self, header_text: str) -> None:
        """
        设置页眉(居中)+ 页脚(居中自动页码)
        格式规范:页眉页脚均为宋体小五(10pt)
        Args:
            header_text: 页眉显示的文本内容
        """
        # 获取文档第一节对象
        section = self.doc.sections[0]
        # ========== 配置页眉 ==========
        header = section.header
        h_para = header.paragraphs[0]
        h_run = h_para.add_run(header_text)
        self._set_font_style(h_run, self.font_cn, self.font_en, 10)
        h_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        # ========== 配置页脚页码 ==========
        footer = section.footer
        f_para = footer.paragraphs[0]
        f_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        # 创建PAGE域,生成Word自动页码
        run = f_para.add_run()
        # 域开始标签
        fld_char_begin = OxmlElement('w:fldChar')
        fld_char_begin.set(qn('w:fldCharType'), 'begin')
        run._element.append(fld_char_begin)
        # 页码域指令
        instr_text = OxmlElement('w:instrText')
        instr_text.text = 'PAGE'
        run._element.append(instr_text)
        # 域结束标签
        fld_char_end = OxmlElement('w:fldChar')
        fld_char_end.set(qn('w:fldCharType'), 'end')
        run._element.append(fld_char_end)
    def save(self) -> None:
        """
        统一保存文档
        所有编辑操作完成后调用一次即可,优化性能
        """
        self.doc.save(self.save_path)
# ====================== 论文生成执行主程序 ======================
if __name__ == '__main__':
    # 论文保存路径
    FILE_PATH = "./本科毕业论文.docx"
    # 初始化论文生成器(自动检测文件是否被占用)
    thesis = ThesisGenerator(save_path=FILE_PATH)
    # ========== 第一页:论文封面 ==========
    thesis.add_title("基于Python的自动化政策周刊生成系统研究")
    # ========== 分节符:封面 → 摘要(论文标准分节) ==========
    thesis.add_section_break()
    # 第二页:摘要与关键词
    thesis.add_abstract(
        abstract_text="本文针对政策周刊人工排版效率低、格式不规范等痛点,基于Python开发自动化生成系统。系统采用python-docx实现Word标准化排版,支持三级标题、图表、页眉页脚等全要素生成,大幅提升办公效率。",
        keywords=["Python", "办公自动化", "政策周刊", "Word排版"]
    )
    # ========== 分节符:摘要 → 目录 ==========
    thesis.add_section_break()
    # 第三页:论文目录
    thesis.add_toc()
    # ========== 分节符:目录 → 正文 ==========
    thesis.add_section_break()
    # 第四页:正文(设置页眉+自动页码)
    thesis.set_header_footer(header_text="Python自动化政策周刊生成系统研究")
    # 正文内容排版
    thesis.add_h1("1 绪论")
    thesis.add_body("政策周刊是政务与企业信息传递的核心载体,传统人工编辑模式存在效率低、格式混乱等问题。")
    thesis.add_h2("1.1 研究背景")
    thesis.add_body("数字化转型推动办公自动化技术快速发展,文档自动生成成为刚需。")
    thesis.add_h3("1.1.1 行业痛点")
    thesis.add_body("人工排版Word文档耗时耗力,格式难以统一,无法满足高频次发布需求。")
    # 插入图片
    thesis.add_image("test.jpg", "图1 系统整体架构图", width_cm=14)
    # 插入表格
    table_data = [
        ["模块", "技术方案", "核心功能"],
        ["文档生成", "python-docx", "自动排版"],
        ["数据处理", "Python", "批量解析"]
    ]
    thesis.add_table("表1 系统功能清单", 3, 3, table_data)
    # ========== 分节符:正文 → 结论 ==========
    thesis.add_section_break()
    thesis.add_h1("2 结论与展望")
    thesis.add_body("本系统实现了政策周刊全流程自动化生成,有效解决传统办公痛点,具备较高的推广价值。")
    # 最终保存文档
    thesis.save()
    # 输出完成提示
    print("\n✅ 本科论文生成完成!")

六、运行结果

运行代码后,输出如下:

✅ 本科论文生成完成!
📄 分节符:已按论文规范插入分节符
📄 页眉/页码:已自动生成
📌 目录:打开Word按 F9 刷新
📌 标题:原生三级标题,支持自动目录

生成的本科毕业论文.docx效果:

  1. 封面:标准黑体二号标题,居中,段前/段后间距完美
  2. 摘要页:摘要、关键词自动排版,1.5倍行距
  3. 目录页:占位符,需要手动插入更新
  4. 正文页
    • 页眉自动居中,页脚自动页码
    • 三级标题自动识别,格式符合规范
    • 正文自动首行缩进、1.5倍行距
    • 图片、表格自动居中,题注自动排版
  5. 分节符:封面/摘要/目录/正文分节,完美符合高校论文格式

七、总结

这个工具把本科论文排版的所有痛点都解决了,你只需要填内容,剩下的格式交给代码就行,能帮你省好几天的排版时间!

如果你有其他格式需求,比如改字体、改间距,直接改代码里的参数就行,非常灵活。

以上就是Python基于python-docx实现的本科毕业论文自动排版工具的详细内容,更多关于python-docx毕业论文自动排版的资料请关注脚本之家其它相关文章!

相关文章

  • PyCharm实现远程调试的全过程(附图文讲解)

    PyCharm实现远程调试的全过程(附图文讲解)

    这篇文章主要介绍了PyCharm实现远程调试的全过程,文中通过图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-05-05
  • Python3 pyecharts生成Html文件柱状图及折线图代码实例

    Python3 pyecharts生成Html文件柱状图及折线图代码实例

    这篇文章主要介绍了Python3 pyecharts生成Html文件柱状图及折线图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • python去除字符串中空格的6种常用方法

    python去除字符串中空格的6种常用方法

    最近业务需要对Pyhon中的一些字符串内容去除空格,方便后续处理,下面这篇文章主要给大家介绍了关于python去除字符串中空格的6种常用方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • python BitMap算法处理20亿随机整数去重

    python BitMap算法处理20亿随机整数去重

    这篇文章主要为大家介绍了python BitMap算法处理20亿随机整数去重,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python之串口收发的异步程序

    Python之串口收发的异步程序

    这篇文章主要介绍了Python之串口收发的异步程序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 用python写的一个wordpress的采集程序

    用python写的一个wordpress的采集程序

    在学习python的过程中,经过不断的尝试及努力,终于完成了第一个像样的python程序,虽然还有很多需要优化的地方,但是目前基本上实现了我所要求的功能,需要的朋友可以参考下
    2016-02-02
  • 用Python shell简化开发

    用Python shell简化开发

    这篇文章给大家详细分享了在Python的开发中,如何通过Python shell简化开发,有兴趣的朋友们可以学习下。
    2018-08-08
  • 使用python实现画AR模型时序图

    使用python实现画AR模型时序图

    今天小编就为大家分享一篇使用python实现画AR模型时序图,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • pycharm + django跨域无提示的解决方法

    pycharm + django跨域无提示的解决方法

    这篇文章主要给大家介绍了关于pycharm + django跨域无提示的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python Scrapy实战之古诗文网的爬取

    Python Scrapy实战之古诗文网的爬取

    本文将利用Python中Scrapy框架,实现爬取古诗文网上的诗词数据,具体包括诗词的标题信息。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-05-05

最新评论