本技能用于创建符合中国政府及央企规范的Word文档(.docx),使用Microsoft Word最新格式。
属性值纸张A4上边距3.7厘米下边距3.5厘米左边距2.8厘米右边距2.6厘米页码居中显示,宋体四号
样式中文字体西文字体字号首页大标题方正小标宋简体 (FZXiaoBiaoSong-B05S)Times New Roman小二号 (18pt)正文方正仿宋简体 (FZFangSong-Z02S)Times New Roman小三号 (15pt)正文无缩进方正仿宋简体 (FZFangSong-Z02S)Times New Roman小三号 (15pt)一级标题黑体Times New Roman小三号 (15pt)二级标题楷体Times New Roman小三号 (15pt)三级标题方正仿宋简体 (FZFangSong-Z02S)Times New Roman小三号 (15pt) 加粗落款-部门方正仿宋简体 (FZFangSong-Z02S)Times New Roman小三号 (15pt)落款-日期方正仿宋简体 (FZFangSong-Z02S)Times New Roman小三号 (15pt)页码宋体-四号 (14pt)表格方正仿宋简体 (FZFangSong-Z02S)Times New Roman小五号 (9pt)
样式行间距首页大标题固定28磅正文固定28磅正文无缩进固定28磅一级标题固定28磅二级标题固定28磅三级标题固定28磅落款-部门固定28磅落款-日期固定28磅图片单倍行距表格单倍行距
样式序号格式首行缩进大纲级别正文有缩进无2字符-正文无缩进无01级一级的标题一、二、三、2字符1级二级的标题(一)(二)(三)2字符2级三级的标题1.2.3.2字符3级落款-部门无无-落款-日期无无-
创建文档时,必须使用以下样式名称:
首页大标题 - 首页大标题正文有缩进 - 正文段落正文无缩进 - 无缩进正文段落(大纲级别一级,用于附件分页标题等需要出现在导航窗格的段落)一级的标题 - 一级标题二级的标题 - 二级标题三级的标题 - 三级标题图片样式 - 图片表格样式 - 表格落款-部门 - 部门落款(右下对齐)落款-日期 - 日期落款(右下对齐,自动与部门左对齐)页码样式 - 页脚页码javascript
const {
createDocument,
createTitleParagraph,
createBodyParagraph,
createLevel1Heading,
createLevel2Heading,
createLevel3Heading,
createTable,
createImageParagraph,
createAttachmentBlock,
CHINESE_FONTS,
FONT_SIZES,
CONTENT_WIDTH,
Packer,
BorderStyle,
WidthType,
ShadingType,
VerticalAlign,
Paragraph,
TextRun,
Table,
TableRow,
TableCell,
Footer,
ImageRun,
} = require('/Users/lhliang/.workbuddy/skills/workbuddy-skill-1777171174172/scripts/create_gov_doc.js');
// 创建文档
const doc = createDocument({
title: '文档标题',
sections: [
// 首页大标题
createTitleParagraph('这是文档标题'),
// 一级标题
createLevel1Heading('第一章', 0), // 输出: 一、第一章
createLevel1Heading('第二章', 1), // 输出: 二、第二章
// 二级标题
createLevel2Heading('第一节', 0), // 输出: (一)第一节
createLevel2Heading('第二节', 1), // 输出: (二)第二节
// 三级标题
createLevel3Heading('第一点', 0), // 输出: 1.第一点
createLevel3Heading('第二点', 1), // 输出: 2.第二点
// 正文
createBodyParagraph('这是正文内容,首行自动缩进2字符。'),
// 表格
createTable(
[
{ children: ['表头1', '表头2', '表头3'] },
{ children: ['内容1', '内容2', '内容3'] },
],
{ columnWidths: [2000, 2000, 2000] }
),
]
});
// 生成文件
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync('output.docx', buffer);
});
bash
node scripts/create_gov_doc.js output.docx '{
"title": "文档标题",
"body": [
{"type": "heading1", "text": "第一章", "number": 0},
{"type": "paragraph", "text": "正文内容"},
{"type": "table", "rows": [...], "columnWidths": [2000, 2000, 2000]}
]
}'
columnWidths 参数控制(DXA 相对值,实际宽度自动缩放)javascript
// 表格示例
const border = { style: BorderStyle.SINGLE, size: 1, color: "000000" };
const borders = { top: border, bottom: border, left: border, right: border };
// 表头行
new TableRow({
tableHeader: true,
children: [
new TableCell({
borders,
shading: { fill: "D9D9D9", type: ShadingType.CLEAR },
children: [new Paragraph({ children: [new TextRun({ text: "表头", bold: true })] })]
})
]
});
落款-部门 样式,日期使用 落款-日期 样式,均为方正仿宋小三号createSignatureBlock() 一键生成javascript
const { createSignatureBlock } = require('...');
// 一键创建落款块(含三行空行 + 部门名称 + 日期)
sections.push(...createSignatureBlock('科技创新部', '2026年6月'));
是否添加附件:落款上方的段落是否包含"附件"列表,应根据文档需求和内容判断
位置与样式:附件位于正文之后、落款之前,全部使用 正文有缩进 样式(方正仿宋小三号、固定28磅行距)
附件名称后不加任何标点符号(不加句号、顿号、逗号等)
格式约定:
使用 createAttachmentBlock() 一键生成
text
附件:1.科技创新工作周报表
text
附件:1.科技创新工作周报表
2.项目实施情况明细表
3.下一步工作计划
javascript
const { createAttachmentBlock } = require('...');
// 单附件
sections.push(...createAttachmentBlock(['科技创新工作周报表']));
// 多附件
sections.push(...createAttachmentBlock([
'科技创新工作周报表',
'项目实施情况明细表',
'下一步工作计划',
]));
javascript
const sections = [
// ... 正文段落 ...
// ... 落款 ...
];
// 在正文和落款之间插入附件
sections.push({ type: 'attachment', attachments: ['附件标题一', '附件标题二'] });
每个附件可在文档最后(落款之后)独占一页,用于手动插入图片或表格等实际内容,每页标题为"附件1""附件2"……依次排列。使用 createAttachmentPages() 一键生成。
javascript
const { createAttachmentPages } = require('...');
// 在落款之后插入附件独立分页
sections.push(...createAttachmentPages(['附件A标题', '附件B标题']));
格式:分页符 → "附件1"( 正文无缩进 样式、加粗、大纲一级,出现在 Word 导航窗格)→ 正文有缩进 空行供插入内容。
在 createGovDocument 中使用:
javascript
sections.push({ type: 'attachment_pages', attachments: ['附件标题一', '附件标题二'] });
图片样式dc:creator 和 lastModifiedBy 留空或不写入)creator 属性,或设置为空字符串javascript
const fs = require('fs');
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
Footer, BorderStyle, WidthType, ShadingType, VerticalAlign,
PageNumber, ImageRun, AlignmentType, HeadingLevel, LevelFormat,
createTitleParagraph, createBodyParagraph, createLevel1Heading,
createLevel2Heading, createLevel3Heading, createTable,
createImageParagraph, createSignatureBlock, createAttachmentBlock,
createAttachmentPages,
createDocument, CHINESE_FONTS, FONT_SIZES,
CONTENT_WIDTH, PAGE_MARGINS, LINE_SPACING_EXACT_28
} = require('/Users/lhliang/.workbuddy/skills/workbuddy-skill-1777171174172/scripts/create_gov_doc.js');
// 内容构建
const sections = [
createTitleParagraph('关于XXX工作的报告'),
createLevel1Heading('一、基本情况', 0),
createBodyParagraph('这里是正文内容,详细描述基本情况。'),
createBodyParagraph('继续描述相关内容和细节。'),
createLevel1Heading('二、主要做法', 1),
createLevel2Heading('(一)加强组织领导', 0),
createBodyParagraph('具体做法描述...'),
createLevel2Heading('(二)完善制度建设', 1),
createBodyParagraph('制度建设内容...'),
createLevel1Heading('三、存在问题', 2),
createBodyParagraph('当前存在以下问题:'),
createLevel3Heading('问题一', 0),
createBodyParagraph('问题一的具体描述。'),
createLevel3Heading('问题二', 1),
createBodyParagraph('问题二的具体描述。'),
createLevel1Heading('四、下一步计划', 3),
createBodyParagraph('针对以上问题,计划采取以下措施...'),
// 附件列表(位置:正文与落款之间;按需添加)
...createAttachmentBlock([
'科技创新工作周报表',
'项目实施情况明细表',
'下一步工作计划',
]),
// 落款(右下对齐,与正文间隔三行空行)
...createSignatureBlock('科技创新部', '2026年6月'),
// 附件独立分页(每个附件独占一页,供插入图片/表格)
...createAttachmentPages([
'科技创新工作周报表',
'项目实施情况明细表',
'下一步工作计划',
]),
];
// 创建文档(不设置作者)
const doc = createDocument({
title: '关于XXX工作的报告',
sections
});
// 生成并保存
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync('report.docx', buffer);
console.log('文档已生成: report.docx');
});
indent: { firstLine: charWidth * 2 },字符宽度约等于字号的一半" 会自动替换为配对的中文双引号 ""( \u201c/ \u201d),无需手动转换createTextRunsFromSegments 对每个 TextRun 均明确写入字体(西文:Times New Roman;中文:对应中文字体 + Times New Roman)。 不要 使用 useDirectFormatting: false 模式(已废弃),始终明确写字体以保证 Word 渲染稳定。createDocument 的 styles.default.document.run.font 必须使用对象格式( { eastAsia, ascii, hAnsi, cs }),不能传字符串,否则 docDefaults 中 ascii/hAnsi 会被设为中文字体导致西文渲染错误。createDocument 的 styles.default.document.paragraph 必须设置 spacing: { before: 0, after: 0, line: 560, lineRule: "exact" },确保 pPrDefault 不为空。这使 Normal(正文)样式在 Word 样式窗格中显示正确的28磅固定行距。无需额外定义 Normal 样式,各自定义样式通过 basedOn: "Normal" 继承后自行覆盖 spacing。scripts/create_gov_doc.js - 核心创建函数库