# cdrtools **Repository Path**: jcstone/cdrtools ## Basic Information - **Project Name**: cdrtools - **Description**: coreldraw外部工具箱 - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-05 - **Last Updated**: 2026-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cdrtools —— CorelDRAW 外部工具箱 ![Python](https://img.shields.io/badge/Python-3.11+-blue) ![PySide6](https://img.shields.io/badge/PySide6-6.11.1-green) ![License](https://img.shields.io/badge/License-AGPL--3.0-red) ![Platform](https://img.shields.io/badge/Platform-Windows-lightgrey) ![Version](https://img.shields.io/badge/Version-v1.0.0-orange) > 一个运行于 CorelDRAW 之外(外部进程)的辅助工具箱,通过 **COM(ActiveX Automation)** 与正在运行的 **CorelDRAW** 通信,把重复性高、手工程度高的制图任务(如批量铭牌制作)封装成可双击执行的功能项。 > **版本号**:程序版本号统一由全局常量 `cdrtools.__version__` 定义(见 `cdrtools/__init__.py`),about 信息与程序界面均从此处读取;升级版本只需修改该处一处。 **Author: jcstone | Email: 64071284@qq.com | Gitee: [https://gitee.com/jcstone/cdrtools](https://gitee.com/jcstone/cdrtools)** --- ## 目录 - [项目简介](#项目简介) - [特性](#特性) - [功能清单](#功能清单) - [软件架构](#软件架构) - [安装教程](#安装教程) - [使用说明](#使用说明) - [常见问题](#常见问题) - [参与贡献](#参与贡献) - [许可证](#许可证) --- ## 项目简介 `cdrtools` 是一个**运行于 CorelDRAW 之外**的辅助工具箱。它以「总在最前、无边框、停靠屏幕左侧」的常驻面板形式运行,通过 COM 与正在运行的 CorelDRAW 实例通信,将辅助绘图、铭牌制作等高频重复的制图任务统一封装为可**双击即执行**的功能项。 设计目标: - **外部常驻**:不随某个 CorelDRAW 文档生命周期绑定,独立窗口常驻屏幕,随用随点。 - **零部署成本**:单机 Python 脚本 + PySide6,无服务端、无数据库、无网络依赖。 - **即插即用的扩展**:新增一个功能 = 新增一个被 `@tool` 装饰的类,主窗口自动在树中显示,无需改动框架。 - **COM 直连 CorelDRAW**:基于 pywin32 的 `win32com` 直接调用 `CorelDRAW.Application` 自动化接口,无需任何第三方 CorelDRAW 库。 ## 特性 - **无边框置顶常驻窗口**:自定义标题栏、四边/四角拖拽缩放、默认停靠屏幕左侧垂直居中,并适配多显示器插拔。 - **CorelDRAW 连接状态指示**:状态栏彩色圆点实时显示连接状态,点击可重新检测。 - **辅助绘图功能**:铭牌制作、批量制作多模板证牌-依EXCEL和CDR模板、批量制作单模板证牌-依EXCEL和CDR模板、批量重复插入单模板-按数量。 - **模板 + 占位符机制**:CDR 模板内含「[列名]」占位符文字,批量制作时自动替换为对应数据,字体沿用占位符样式。 - **暗黑主题**:统一深色调色板,原生对话框与主窗口风格一致。 - **统一的执行计时与结果反馈**:每个工具自动记录开始/结束时间与总用时,失败语义清晰。 ## 功能清单 | 分类 | 功能 | |---|---| | **辅助绘图** | 铭牌制作(单模板 + 宽高设置)、批量制作多模板证牌-依EXCEL和CDR模板、批量制作单模板证牌-依EXCEL和CDR模板、批量重复插入单模板-按数量 | ### 辅助绘图 #### 铭牌制作 通过 COM 通讯控制 CorelDRAW,在活动文档中按用户设定的宽高绘制一个矩形作为铭牌底板,并验证通讯链路。可自定义标题/信息占位符与批量文字,支持按行列间距网格排列。 #### 批量制作多模板证牌-依EXCEL和CDR模板 读取 Excel 中的铭牌数据,根据「模板」列选择对应的 CDR 铭牌模板,批量绘制,并把模板内形如「[列名]」的文字占位符替换为该行记录对应列的值。 **Excel 列头示例**:`序号,设备名称,设备操作说明,产品型号,铭牌尺寸,数量,模板` **参数说明**: | 参数 | 说明 | |---|---| | Excel 数据文件 | 铭牌数据文件(.xlsx / .xlsm) | | CDR 模板目录 | 默认 `template/`(当前程序目录下),也可自行选择 | | 模板列 | 记录对应的 CDR 模板文件名(相对模板目录) | | 尺寸列 | 铭牌尺寸,示例「150*50」(宽*高),用于计算排布间距 | | 铭牌绘制列数 | 每行最多放置的铭牌数量 | | 列间隔 | 列间距 = 铭牌宽度 + 列间隔 | | 行间隔 | 行间距 = 铭牌高度 + 行间隔 | **排布规则**:从页面顶部左侧开始,从左到右、从上到下;同尺寸铭牌排在同一行,若下一铭牌尺寸与当前行不同或行满则自动换行。换行位置基于上一行的实际尺寸高度 + 行间隔计算。 **占位符替换**:模板内形如「[列名]」的文字(如 `[设备名称]`、`[设备操作说明]`、`[产品型号]`、`[序号]`)会自动替换为 Excel 该行记录对应列的值,字体沿用原占位符字体样式。 #### 批量制作单模板证牌-依EXCEL和CDR模板 读取 Excel 中的证牌数据,根据「数量」列重复绘制**同一个** CDR 模板证牌,并把模板内形如「[列名]」的文字占位符替换为该行记录对应列的值。模板通过导入方式插入到**当前 CorelDRAW 活动文档**,**不在原模板文件上操作**。适合同一版式(单模板)但需要按数据批量、重复制作证牌的场合(如设备铭牌、合格证、标签)。 **Excel 列头示例**:`序号,产品名称,规格型号,数量` **参数说明**: | 参数 | 说明 | |---|---| | Excel 数据文件 | 证牌数据文件(.xlsx / .xlsm) | | CDR 模板文件 | **单个** CDR 模板文件,所有记录共用 | | 数量列 | 该记录需重复绘制的证牌数量(可带单位,如 `2台`,自动提取数字) | | 模板宽 / 模板高 | 证牌网格尺寸,默认 80 × 120 | | 初始坐标 X / Y | 第一块证牌左上角位置,默认 -400 / 400 | | 列数 | 每行最多放置的证牌数量,默认 5 | | 列间隔 / 行间隔 | 组内列/行间距,默认 10 / 10 | | 组行数 | 几行为一组,默认 3 | | 组间隔 | 组与组之间的行间距,默认 20 | **排布规则**:从**初始坐标**开始,从左到右、从上到下;列位置 = 初始X + 列号×(模板宽+列间隔);组内行 y = 组顶部 − 组内行号×(模板高+行间隔);满**列数**后换行,组内行数达到**组行数**后按**组间隔**开启新组(组内按行间隔)。 **占位符替换**:模板内形如「[列名]」的文字(如 `[产品名称]`、`[规格型号]`、`[序号]`)会自动替换为 Excel 该行记录对应列的值,字体沿用原占位符字体样式。 #### 批量重复插入单模板-按数量 按输入的**总数量**,在**当前 CorelDRAW 活动文档**中重复插入**同一个** CDR 模板,**不做文字替换**,模板原样插入。适用于需要大量复制同一图形并按网格排布的场合。 **参数说明**: | 参数 | 说明 | |---|---| | CDR 模板文件 | **单个** CDR 模板文件 | | 总数量 | 需重复插入的模板数量,默认 10 | | 模板宽 / 模板高 | 网格尺寸,默认 80 × 120 | | 起始坐标 X / Y | 第一个模板左上角位置,默认 -400 / 400 | | 列数 | 每行最多放置的模板数量,默认 1 | | 列间距 / 行间距 | 列/行间距,默认 0 / 0 | **排布规则**:从**起始坐标**开始,从左到右、从上到下;列位置 = 起始X + 列号×(模板宽+列间距);行位置 = 起始Y − 行号×(模板高+行间距);满**列数**后换到下一行。模板文件只读,通过导入插入当前活动文档,不打开/修改原文件。 ## 软件架构 ``` ┌───────────────────────────── 外部进程 (python) ─────────────────────────────┐ │ main.py ─▶ cdrtools.__init__ ─▶ toolbox.py: ToolboxWindow (主窗口) │ │ │ ├─ TitleBar(无边框标题栏) │ │ │ ├─ QTreeWidget(工具箱分类树) │ │ │ ├─ StatusIndicator(连接指示器) │ │ │ └─ closeEvent(防悬空引用) │ │ ├─ core/ │ │ │ ├─ registry.py @tool 装饰器 + 注册表 │ │ │ ├─ base.py Tool 基类(run/execute/timing/failed) │ │ │ ├─ cd_com.py CorelDRAW COM 连接与绘制封装 │ │ │ └─ paths.py 资源路径定位(源码/打包兼容) │ │ ├─ resources_rc.py 程序图标(运行时 QPainter 绘制) │ │ └─ tools/ │ │ └─ aux_draw/ (辅助绘图分类) │ │ ├─ tool_nameplate.py 铭牌制作 │ │ ├─ tool_nameplate_excel.py 多模板证牌批量制作 │ │ ├─ tool_certplate_single.py 单模板证牌批量制作 │ │ ├─ tool_template_repeat.py 单模板按数量重复插入 │ │ └─ __init__.py CATEGORY + 注册导入 │ │ ────── CorelDRAW COM (ActiveX Automation) ────── │ │ CorelDRAW ── Application / ActiveDocument / ActiveLayer / │ │ Shape.Text.Story / CreateRectangle / Duplicate / Import │ └──────────────────────────────────────────────────────────────────────────────┘ ``` ### 技术栈与依赖 | 依赖 | 版本 | 用途 | |---|---|---| | Python | 3.11+ | 运行时 | | PySide6 | 6.11.1 | Qt GUI(无边框窗口、树、样式表) | | pywin32 | ≥312 | `win32com` / `pythoncom`(CorelDRAW COM 通讯) | | openpyxl | ≥3.1 | 读取 Excel 数据(批量制作证牌) | | CorelDRAW | 任意支持 COM 自动化的版本 | 本机安装并运行 | ### 核心设计要点 - **功能注册表**:`@tool(category, name, description)` 装饰器在导入时自动登记工具;主窗口读取注册表构建树形控件。 - **Tool 基类模板方法**:`execute()` 统一计时,再调 `run()`;`failed` 标志区分「执行完成」与「执行结束」。 - **CorelDRAW COM 封装**:`cd_com.py` 统一封装 `Dispatch("CorelDRAW.Application")`、活动文档/图层、文本读写(`Shape.Text.Story`)、字体样式、包围盒、复制移动、模板导入等原语。 - **模板 + 占位符**:模板内「[列名]」占位符由 Excel 列值替换,字体继承占位符样式;多模板通过 `Layer.Import()` 导入到统一目标文档。 ## 安装教程 ### 环境要求 - Windows 操作系统 - 已安装并正在运行 **CorelDRAW**(支持 COM 自动化) - 已安装 **Python 3.11+**(并已加入系统 `PATH`,或使用官方 Python / Anaconda 安装器自带的 `py` 启动器) ### 第 1 步:克隆 / 下载项目 ```bash git clone https://gitee.com/jcstone/cdrtools.git cd cdrtools ``` ### 第 2 步:创建并激活虚拟环境(推荐) 在项目根目录创建独立虚拟环境,避免污染全局 Python: ```powershell # 在项目根目录创建虚拟环境 .venv python -m venv .venv # 激活虚拟环境(PowerShell) .\.venv\Scripts\Activate.ps1 # 激活虚拟环境(CMD) # .venv\Scripts\activate.bat ``` > 若 PowerShell 提示「禁止运行脚本」,请先放开执行策略(以管理员运行): > `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` ### 第 3 步:安装 Python 依赖 激活虚拟环境后,安装 `requirements.txt` 中的依赖: ```bash pip install -r requirements.txt ``` > 国内网络可追加镜像源加速:`pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple` ### 第 4 步:(可选)准备铭牌模板目录 在项目根目录创建 `template/` 目录,放入铭牌模板 `.cdr` 文件(模板内包含「[列名]」占位符文字)。 ### 启动 ```bash python main.py ``` 工具箱启动后自动停靠在屏幕**左侧垂直居中**,无边框、总在最前。 ## 使用说明 ### 界面构成 ``` ┌─────────────────────────────┐ │ [图标] CDR工具箱 [—][×] │ ← 标题栏(可拖动) ├─────────────────────────────┤ │ ▼ 辅助绘图 │ ← 分类(手风琴) │ 铭牌制作 │ │ 批量制作多模板证牌-依EXCEL和CDR模板│ │ 批量制作单模板证牌-依EXCEL和CDR模板│ │ 批量重复插入单模板-按数量 │ │ ───────────────────────── │ │ 描述面板(说明/运行结果) │ │ ● CorelDRAW 就绪 │ ← 状态栏 └─────────────────────────────┘ ``` - **单击**分类节点:展开/收起(手风琴,同时折叠其它分类)。 - **单击**功能项:显示该功能说明(不执行)。 - **双击**功能项:立即执行。 - **描述面板**:显示功能说明、运行进度、执行结果(含开始/结束时间、总用时)。 - **状态栏圆点**:🟢 绿色=已连接;🔴 红色=未连接;🟡 黄色=检测中。点击可重新检测。 ### 工具一:铭牌制作 **用途**:选择一个 CDR 铭牌模板,输入标题与信息文字,批量生成多个铭牌。适合铭牌内容变化不大、需要快速排布的场合。 #### 使用步骤 1. 在 CorelDRAW 中打开或准备一个文档(或由程序自动新建)。 2. 双击「辅助绘图 → 铭牌制作」,弹出铭牌制作面板。 3. 点击「浏览…」选择铭牌模板 **CDR 文件**。 4. 输入标题占位符文本、信息文字占位符文本(默认 `[设备名称]`、`[设备操作说明]`)。 5. 在「批量铭牌文本」框中按每行一个铭牌填写,格式:`标题,信息`,多个铭牌用**换行**或**分号 `;`** 分隔。 6. 设置列数(行数根据铭牌数量自动计算)、行间距(默认 70)、列间距(默认 50)。 7. 点击「制作铭牌」。 #### 批量文本格式 | 输入 | 说明 | |---|---| | `1#泵,请定期检查压力表` | 标题为 `1#泵`,信息为 `请定期检查压力表` | | 换行分隔 | 每个铭牌一行 | | 分号 `;` 分隔 | 也可用分号把多个铭牌写在同一行 | #### 模板 CDR 规范 - 模板为单个 `.cdr` 文件,内含**标题占位符**和**信息占位符**两处文字。 - 占位符文字必须与面板中输入的「标题占位符」「信息占位符」**完全一致**(默认 `[设备名称]`、`[设备操作说明]`)。 - 程序在模板中**按文本精确匹配**占位符,并把该文字替换为对应铭牌的标题/信息,**字体、字号沿用原占位符样式**。 - 模板内容整体作为一格,从页面左上角起按行列网格排布。 ### 工具二:批量制作多模板证牌-依EXCEL和CDR模板 **用途**:读取 Excel 中的铭牌数据,根据每行记录的「模板」列选择对应的 CDR 模板,批量绘制,并把模板内「[列名]」占位符替换为该行记录对应列的值。适合铭牌种类多、数量大、需要与数据表联动的场合。 #### 使用步骤 1. 双击「辅助绘图 → 批量制作多模板证牌-依EXCEL和CDR模板」,弹出面板。 2. 点击「浏览文件…」选择 **Excel 数据文件**(`.xlsx` / `.xlsm`)。 3. 选择 **CDR 模板目录**(默认 `template/`,也可「浏览目录…」)。 4. 下拉选择: - **模板列**:Excel 中记录 CDR 模板文件名(相对模板目录)的列,默认选中「模板」。 - **尺寸列**:记录铭牌尺寸(如 `150*50`)的列,默认选中「尺寸」。 5. 设置铭牌绘制列数(默认 5)、列间隔(默认 10)、行间隔(默认 10)。 6. 点击「确定」。 #### Excel 规范 Excel 首行为**列头**,从第 2 行起为数据记录。推荐列头示例: | 序号 | 设备名称 | 设备操作说明 | 产品型号 | 铭牌尺寸 | 数量 | 模板 | |---|---|---|---|---|---|---| | 1 | 一号泵 | 请定期检查压力表 | A-100 | 150*50 | 2 | pump.cdr | | 2 | 二号泵 | 请定期检查温度表 | A-200 | 150*50 | 1 | pump.cdr | | 3 | 配电柜 | 请勿带电操作 | E-500 | 120*60 | 1 | panel.cdr | - **模板列(必选)**:值为 CDR 模板文件名,可带或不带 `.cdr` 扩展名;文件须位于所选「CDR 模板目录」下。 - **尺寸列**:值为 `宽*高`(毫米),如 `150*50`。用于计算排布间距(列间距=宽+列间隔,行间距=高+行间隔)。若该列未提供或无法解析,则回退用模板实际内容范围。 - **每条记录只绘制一个铭牌**(忽略「数量」列的重复绘制)。 - 其它任意列(如「设备名称」「产品型号」「序号」等)均可作为模板内占位符的数据来源。 #### 模板 CDR 规范 - 每个模板为一个 `.cdr` 文件,文件名对应 Excel「模板列」的值。 - 模板内可包含**任意多个「[列名]」占位符文字**(如 `[设备名称]`、`[设备操作说明]`、`[产品型号]`、`[序号]`)。 - 占位符**列名必须与 Excel 列头完全一致**(含中括号),程序据此替换为对应值;若 Excel 中无同名列则原样保留。 - 替换后**字体、字号、粗斜体沿用原占位符样式**。 - 多个不同模板可同时使用(通过模板列切换),程序会把它们导入到**同一个目标文档**。 #### 排布规则 - 从**页面顶部左侧**开始,**从左到右、从上到下**排列。 - **同尺寸**的铭牌排在同一行;若下一铭牌尺寸与当前行不同、或当前行已满(达到绘制列数),则**自动换行**。 - 换行位置基于**上一行实际内容高度 + 行间隔**计算,确保各行间距均匀。 ### 工具三:批量制作单模板证牌-依EXCEL和CDR模板 **用途**:读取 Excel 数据,根据「数量」列重复绘制**同一个** CDR 模板证牌,并把模板内「[列名]」占位符替换为该行记录对应列的值。模板**导入到当前 CorelDRAW 活动文档**,不在原模板文件上操作。适合同一版式(单模板)但需要按数据批量、重复制作证牌的场合。 #### 使用步骤 1. 先在 CorelDRAW 中**打开目标文档**(证牌将批量插入到该当前活动文档中)。 2. 双击「辅助绘图 → 批量制作单模板证牌-依EXCEL和CDR模板」,弹出面板。 3. 点击「浏览文件…」选择 **Excel 数据文件**(`.xlsx` / `.xlsm`)。 4. 点击「浏览文件…」选择 **CDR 模板文件**(**单个**,所有记录共用此模板)。 5. 下拉选择 **数量列**(从 Excel 首行列头获取,默认智能选中「数量」)。 6. 设置模板宽(默认 80)、模板高(默认 120)、初始坐标 X/Y(默认 -400 / 400)。 7. 设置列数(默认 5)、列间隔(默认 10)、行间隔(默认 10)、组行数(默认 3)、组间隔(默认 20)。 8. 点击「确定」,程序把模板导入当前活动文档,按数量列逐个绘制证牌,描述面板显示实时进度。 #### Excel 规范 Excel 首行为**列头**,从第 2 行起为数据记录。推荐列头示例: | 序号 | 产品名称 | 规格型号 | 数量 | |---|---|---|---| | 1 | 三相异步电机 | YE3-100L-4 | 2 | | 2 | 交流接触器 | CJX2-2510 | 1 | | 3 | 塑壳断路器 | NM1-125S | 3 | - **数量列(必选)**:该记录需重复绘制的证牌数量;可带单位(如 `2台`),程序自动提取数字,无法解析时回退为 1。 - 其它任意列(如「产品名称」「规格型号」「序号」)均可作为模板内占位符的数据来源。 #### 模板 CDR 规范 - **单个** `.cdr` 模板文件,所有记录共用;模板内可包含任意多个「[列名]」占位符文字(如 `[产品名称]`、`[规格型号]`、`[序号]`)。 - 占位符**列名必须与 Excel 列头完全一致**(含中括号);若 Excel 中无同名列则原样保留。 - 替换后**字体、字号、粗斜体沿用原占位符样式**。 - 模板文件**只读使用**:程序通过 `Layer.Import()` 把模板导入到当前活动文档,**不会打开/修改原模板文件**。 #### 排布规则 - 从**初始坐标**(默认 -400, 400,即第一块证牌的左上角)开始,**从左到右、从上到下**排列。 - 列位置 = 初始X + 列号×(模板宽+列间隔);组内行 y = 组顶部 − 组内行号×(模板高+行间隔)。 - 满**列数**后换到下一行;组内行数达到**组行数**后开启新组,**组与组之间按组间隔**换行,组内按行间隔。 ### 工具四:批量重复插入单模板-按数量 **用途**:按输入的**总数量**,在**当前 CorelDRAW 活动文档**中重复插入**同一个** CDR 模板,**不做文字替换**,模板原样插入。适用于需要大量复制同一图形并按网格排布的场合。 #### 使用步骤 1. 先在 CorelDRAW 中**打开目标文档**(模板将批量插入到该当前活动文档中)。 2. 双击「辅助绘图 → 批量重复插入单模板-按数量」,弹出面板。 3. 点击「浏览文件…」选择 **CDR 模板文件**(**单个**)。 4. 设置**总数量**(默认 10)。 5. 设置模板宽(默认 80)、模板高(默认 120)、起始坐标 X/Y(默认 -400 / 400)。 6. 设置列数(默认 1)、列间距(默认 0)、行间距(默认 0)。 7. 点击「确定」,程序把模板导入当前活动文档,按数量重复插入,描述面板显示实时进度。 #### 排布规则 - 从**起始坐标**(默认 -400, 400,即第一个模板的左上角)开始,**从左到右、从上到下**排列。 - 列位置 = 起始X + 列号×(模板宽+列间距);行位置 = 起始Y − 行号×(模板高+行间距)。 - 满**列数**后换到下一行;无分组、无文字替换,模板原样插入。 ### 日志 - 异常日志:`%USERPROFILE%\cdrtools.log` ## 打包 ```bash py -m PyInstaller main.py --noconfirm --clean --onefile --windowed ``` dist目录下为可执行程序,可直接下载使用 ## 常见问题 | 问题 | 解决方法 | |---|---| | 双击功能无反应 / 状态栏红点 | 确认 CorelDRAW 已安装并运行,点击状态栏重新检测连接 | | 报「无法连接 CorelDRAW」但已打开 | 以管理员身份运行,或重启 CorelDRAW 后点击状态栏重试 | | 批量制作提示未找到模板 | 确认「模板」列的文件名与 CDR 模板目录下实际文件名一致(不区分扩展名) | | 占位符未替换 | 确认模板内「[列名]」占位符与 Excel 列头完全一致(含中括号);Excel 须存在同名列 | | 铭牌尺寸未按预期 | 确认「尺寸列」值为 `宽*高`(如 `150*50`);未提供时回退用模板实际范围 | | 铭牌排布错乱/重叠 | 确认各模板实际内容尺寸与「尺寸列」一致;换行由尺寸变化自动触发 | | 打开 Excel 报错 | 确认文件为 `.xlsx` / `.xlsm` 格式,且首行为列头 | | 证牌数量不对 | 确认「数量列」已正确选择;带单位的数量(如 `2台`)会自动提取数字,无法解析时按 1 绘制 | | 证牌排布重叠/错乱 | 确认模板宽/高与实际模板内容尺寸一致;组内按行间隔、组间按组间隔换行 | | 重复插入数量不对 | 确认「总数量」已正确填写;按列数满列换行,列间距/行间距为 0 时模板紧贴 | ## 参与贡献 欢迎 Fork 本仓库并提交 Pull Request: 1. **Fork** 本仓库 2. 新建功能分支:`git checkout -b Feat_xxx` 3. 新增工具功能:在 `cdrtools/tools/aux_draw/` 下新增被 `@tool` 装饰的 `tool_xxx.py`,并在 `__init__.py` 导入 4. 提交代码:`git commit -m "feat: xxx"` 5. 推送分支:`git push origin Feat_xxx` 6. 新建 Pull Request ## 许可证 本项目基于 **GNU Affero General Public License v3.0**(AGPL-3.0)开源,详见 [LICENSE](LICENSE)。 --- Copyright © 2026 **jcstone**. 本项目仅供学习与交流,如有问题或者进一步扩展开发,欢迎通过 Email(64071284@qq.com)或 Gitee Issues 反馈。