DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

longaotiandedage /

longaotiandedage/dsh-tool-gongwen

Verified

让你DSH的输出厅里厅气的|按 GB/T 9704—2012《党政机关公文格式》生成与校验中文公文 DOCX/PDF,纯 JS 零依赖,附版面自校验

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@9d7bef33

关于公文格式 DSH 插件的项目说明

示例:按 GB/T 9704—2012 排版的公文首页

一、项目概况

中文公文的版式由 GB/T 9704—2012《党政机关公文格式》规定,参数琐碎且相互牵连: 固定行距 28 磅、三号字折合 16 磅、首行缩进两字折合 640 twips、发文机关标志须为红色小标宋、 页码须单页居右双页居左。任一处记错,整份文件即不合规。

本插件把上述机械部分固定为代码,由三个原生工具承担。内容组织、文种选择与措辞规范 仍由使用者判断,插件不作干预。

三个工具已在 DSH 桌面版中完成真实加载验证:会话内直接调用可生成 DOCX 与 PDF, 回读校验十一项全部符合国标。

二、功能构成

工具 作用 外部依赖
gongwen_docx 生成符合国标的 DOCX 无,纯 JavaScript 实现
gongwen_pdf 生成符合国标的 PDF 本机需装 TeX Live(xelatex)
gongwen_check 校验既有 DOCX 或 PDF 的版面 无

三、安装与加载

(一)前置条件

项目 要求 说明
DSH 0.2.x 插件依 cordis 规范加载
Node.js 20 及以上 DSH 自带运行时即可
TeX Live 可选 仅 gongwen_pdf 需要;不装只影响 PDF 工具
中文字体 仿宋、黑体、楷体、宋体 Windows 自带;macOS 与 Linux 会降级

DOCX 与校验两项功能不依赖任何外部程序,装完即可用。

(二)一键安装

取得源码后,仓库根目录有两个批处理文件:

文件 作用
install.bat 安装:装依赖、登记 bundle、提示重启
uninstall.bat 卸载:移除 bundle 登记、卸载依赖

双击 install.bat 即可。脚本会自动定位 DSH 目录、profile 与自带 pnpm, 先备份 profile 的 package.json 与 pnpm-lock.yaml,再执行安装。 窗口中会逐条打印每一步结果,完成后提示重启 DSH。

若只想先看它打算做什么,可在命令行执行:

node install.mjs --dry-run

预演模式只检查环境并打印步骤,不改任何文件。

安装失败时脚本会自动还原 package.json;也可手动回滚最近一次改动:

node install.mjs --rollback

(三)手动安装

不想用脚本时,按四步操作。

其一,取得源码并放到固定位置:

git clone https://github.com/longaotiandedage/dsh-tool-gongwen.git ~/dsh-tool-gongwen

若网络到 github.com 的 git 协议不稳定,可改用网页下载:打开仓库页,点绿色 Code 按钮选 Download ZIP,解压后重命名为 dsh-tool-gongwen 放在用户主目录下。 两者内容一致,后续步骤相同。

其二,进入 profile 目录,以本地路径安装:

cd ~/.dsh/profiles/desktop
pnpm add "file:$HOME/dsh-tool-gongwen"

其三,在该目录的 package.json 中登记模块名。dsh.profile.bundles 数组里追加一项:

{
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "dsh-whale-widget",
        "dsh-tool-gongwen"
      ]
    }
  }
}

其四,重启 DSH。若已开启热加载,保存后等待片刻亦可。

若日后发布至 npm,则第二步改为 pnpm add dsh-tool-gongwen,其余不变。

(四)挂载机制说明

DSH 的 bundle 不会因为"装进 node_modules"就自动加载,还需两处配合。本仓库已自带, 使用者无需手工创建,但了解其原理有助于排查问题。

其一,包内声明挂载文件:

"dsh": { "bundle": { "patch": "./cordis.patch.yml" } }

其二,该 patch 用 insert 把自己插入 profile 的配置树:

- insert:
    - id: dsh-tool-gongwen
      name: dsh-tool-gongwen

DSH 启动时按 bundle 层栈依次叠加各插件的 patch,insert 条目即被实例化。 若只做了 pnpm add 而漏了 bundles 登记,插件不会加载,且不报错——这是最容易 踩空的一步。

(五)验证安装

重启后在会话中提出如下要求,若工具可用即安装成功:

用 gongwen_docx 生成一份关于××的通知,输出到 test.docx

生成后用 gongwen_check 校验,应返回"符合 GB/T 9704—2012"。

亦可直接运行仓库自带的自检,不依赖 DSH 运行时:

node test/selftest.mjs

(六)卸载

双击 uninstall.bat,或执行 node uninstall.mjs。脚本会从 dsh.profile.bundles 中移除登记、卸载依赖,然后提示重启。

手动方式:从 dsh.profile.bundles 中删除 "dsh-tool-gongwen",执行 pnpm remove dsh-tool-gongwen,重启即可。

插件不写入任何全局路径。安装时在 profile 下生成的 .gongwen-backup-* 备份目录 可由使用者自行删除。

四、使用方法

(一)生成 DOCX

gongwen_docx({
  org: "华中科技大学教务处文件",
  docno: "教字〔2026〕15 号",
  title: "关于开展数值方法课程资源建设的通知",
  to: "各教学单位:",
  blocks: [
    { type: "body", text: "为加强……现将有关事项通知如下。" },
    { type: "h1", text: "一、建设目标" },
    { type: "h2", text: "(一)总体要求" },
    { type: "h3", text: "1. 讲义建设" }
  ],
  attachments: ["1. 任务分工表", "2. 体例说明"],
  signOrg: "华中科技大学教务处",
  signDate: "2026年10月26日",
  output: "notice.docx"
})

(二)生成 PDF

参数与上节相同,仅将 output 改为 .pdf。

(三)版面校验

gongwen_check({ path: "notice.docx" })

输出为逐项对照表:

项目                    实测      国标   判定
页面宽                  210     210   OK
上白边(天头)               37      37   OK
版心宽                  156     156   OK
正文字号                  16      16   OK pt
行距                    28      28   OK pt
奇偶页不同页码                1       1   OK
结论:符合 GB/T 9704—2012

五、内容规格

字段 必需 说明
org 否 发文机关标志,红色小标宋、居中
orgBold 否 版头是否加粗,默认否
docno 否 发文字号,其后自动加红色分隔线
title 建议 文件标题,二号小标宋、居中
to 否 主送机关,顶格
blocks 是 正文块序列
attachments 否 附件说明,首行左空二字,续行左空五字
signOrg 否 发文机关署名,居中于成文日期之上
signDate 否 成文日期,右空二字
output 是 输出路径,相对路径按会话工作目录解析

正文块类型有五:h1 为一级标题(形如「一、」,三号黑体)、h2 为二级标题 (形如「(一)」,三号楷体)、h3 为三级标题(形如「1.」,三号仿宋加粗)、 to 为主送机关、body 为普通段落。

六、技术实现

版式参数须换算为 OOXML 单位方可写入:长度用 twips(1/20 磅),字号用半磅。 换算关系列表如下。

项目 数值 OOXML 写法
页面 A4,210 × 297 mm <w:pgSz w:w="11906" w:h="16838"/>
天头 37 mm w:top="2098"
订口 28 mm w:left="1587"
右白边 26 mm w:right="1474"
下白边 35 mm w:bottom="1984"
正文 三号仿宋 16 磅 <w:sz w:val="32"/>
行距 固定 28 磅 w:line="560" w:lineRule="exact"
首行缩进 2 字 w:firstLine="640"

长度换算为 1 毫米等于 56.6929 twips,由 mm() 函数统一处理。 字号换算为 1 磅等于 2 个半磅单位,故三号字写作 32。

DOCX 生成与 ZIP 读写均自行实现,见 lib/zip.js 与 lib/docx.js, 除 Node 内置模块外不引入任何依赖。作此取舍的原因在于:插件运行于使用者的 DSH 安装目录之内,多一项依赖即多一处安装失败的可能。

七、校验能力与边界

DOCX 的校验读取 sectPr 与 styles.xml,所得为精确值,可覆盖页面尺寸、 四边白边、版心、正文字号、行距与奇偶页设置。

PDF 的校验仅能读取页面尺寸,方法为解压对象流后读取 MediaBox。四边白边需 文字坐标,本插件不引入 PDF 解析器,须改用配套技能的 scripts/verify_layout.py(依赖 PyMuPDF)。

自检脚本

仓库自带自检,不依赖 DSH 运行时,装完可直接运行:

node test/selftest.mjs

覆盖 ZIP 读写往返、DOCX 生成与版面回读、PDF 生成与页面尺寸、报告格式。 未装 TeX Live 时 PDF 一项自动跳过,其余照常。

  PASS  ZIP 读写往返  — 227 字节,2 个条目
  PASS  生成 DOCX 并校验  — 9911 字节,8 项全部符合国标
  PASS  生成 PDF 并校验  — 38401 字节,页面尺寸符合国标
  PASS  字体  — 正文 = FangSong(仿宋)
  PASS  字体  — 标题 = 华文中宋(替代方正小标宋)
  PASS  报告格式  — 17 行

八、示例性质与法律提示

examples/ 中的通知为排版示例,其中机构名称、发文字号、日期与联系方式均属虚构, 不指向任何真实存在的机关、企业或组织,亦不构成任何真实文件。

使用本插件生成正式文件时,请注意以下三点。

其一,不得冒用真实机构的名称与文号。伪造国家机关公文可能触犯《刑法》第二百八十条; 《治安管理处罚法》(2025 年修订,2026 年 1 月 1 日施行)第六十三条对伪造、变造、 买卖国家机关、人民团体、企业事业单位或者其他组织的公文亦有处罚规定。

其二,本插件不生成印章。公文生效依赖真实印章,任何形式的电子伪造印章均不在 本插件能力范围之内。

其三,发布或分发示例文件时,应避免使用已注册的商标或他人已登记的名称。

生成的文件如何使用,由使用者负责。

九、许可

MIT 许可,详见 LICENSE。

—/ 5

No ratings yet

Verified DSH bundle

Commit 9d7bef3317f6

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout