Skip to content

gmdzy2010/docx_parsing_gmdzy2010

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

文本模板转DOCX文件

PyPI

功能概述


本包基于一套自定义的轻量级文本模板解析系统,用于将文本文件转成Word的docx文件

输入文件

1. 文本模板文件

模板文件是一个纯文本文件,每3行为一个解析单位,解析规则只有以下3条:

1.1 第一行包括元素类型和样式名称,用":"隔开;

1.2 第二行为要写入docx文件的文本,每行内部分为多个run单位,用"||"隔开,每个run可以有下划线和加粗两种样式,在每个run的尾部,用"::"隔开

1.3 第三行为分割线,79个下划线,为了让模板更易读而已,没太大意义

2. DOCX模板文件

文件为一个空的或者自定义的docx文件,最好是包含python-docx自带docx模板的所有样式,方便直接调用 注意:样式有可能不生效,解决方法请移步python-docx的官方文档

3. 文本模板的上下文数据

上下文数据为一个字典型的变量,用来对模板的变量进行格式化。

3.1 段落上下文对象PARAGRAPH_CONTEXT

例如,文本模板中有一个段落上下文变量test_context

...
cover:cover_title
模板内容||{test_context}::underline||后续文本
-------------------------------------------------------------------------------
...

则需要新建段落上下文对象,是一个python字典对象,可以以字典键值对的形式添加多个

PARAGRAPH_CONTEXT = {
    "demo_field_1": "测试文本",
    "demo_field_2": 300.00,
    "demo_field_3": 18003.00,
}

3.2 表格上下文对象TABLE_CONTEXT

例如,文本模板中有一个表格

...
table:demo_table_1
表格下面的文本不重要,仅仅用于占位
-------------------------------------------------------------------------------
...

这时需要新建表格上下文对象,包含表格的维度rows, cols,样式style等,类似于下方,可以以字典键值对的形式添加多个

TABLE_CONTEXT = {
    "demo_table_1": {
        "attr": {
            "style": "Table Grid",
            "rows": 5,
            "cols": 4,
        },
        "data": (
            ("第1列标题", "第2列标题", "第3列标题", "第4列标题"),
            ("第1行第1列内容", "第1行第2列内容", "第1行第3列内容", "第1行第4列内容"),
            ("第2行第1列内容", "第2行第2列内容", "第2行第3列内容", "第2行第4列内容"),
            ("第3行第1列内容", "第3行第2列内容", "第3行第3列内容", "第3行第4列内容"),
            ("第4行第1列内容", "第4行第2列内容", "第4行第3列内容", "第4行第4列内容"),
        )
    },
},

3.3 图片上下文对象PICTURE_CONTEXT

仍在测试中,后续单元测试通过后会将文档更新

使用


STEP 1. 在项目中导入渲染器DocxProduce

STEP 2. 写好文本模板,选择一个自带样式比较齐全的DOCX文件,可以从python-docx默认的模板拷贝而来

STEP 3. 加载准备好的上下文和格式及样式数据,执行程序即完成