Skip to content

参考

docx 常用类、构造选项、枚举与单位 速查。版本基线 9.7.1(MIT)。

速查

  • Node 导出:await Packer.toBuffer(doc);浏览器下载:await Packer.toBlob(doc)
  • Web 二进制接口:await Packer.toArrayBuffer(doc);通用底层出口:await Packer.pack(doc, outputType)
  • toBuffertoBlobtoArrayBuffertoBase64StringtoString 返回 Promise;只有 toStream 立即返回 Stream
  • 9.7.1 的 toStream 仍先生成完整 Buffer 再发出,不是增量 OOXML/ZIP 生成器
  • ImageRun.data 支持 Buffer、字符串、Uint8Array、ArrayBuffer,不接受 Blob;SVG 另需 fallback
  • 模板补丁默认识别 {{tag}};可先用 await patchDetector({ data }) 枚举占位符

一、核心类与对象层级

作用嵌套位置
Document文档根,new Document({ sections, ... })最外层
section(普通对象)节:页面/页眉脚 + childrenDocument.sections[]
Paragraph段落section.children[] / 单元格
TextRun带样式文本片段Paragraph.children[]
ImageRun图片Paragraph.children[]
ExternalHyperlink / InternalHyperlink外链 / 站内跳转Paragraph.children[]
Table / TableRow / TableCell表格三件套section.children[]
Header / Footer页眉 / 页脚section.headers/footers
TableOfContents目录section.children[]
Bookmark书签锚点Paragraph.children[]
Math / MathRun数学公式Paragraph.children[]
Packer打包导出(静态方法)

二、Packer 导出方法

方法返回场景
Packer.pack<T>(doc, type, prettify?, overrides?)Promise<OutputByType[T]>按输出类型统一调用
Packer.toBuffer(doc, prettify?, overrides?)Promise<Buffer>Node 写盘 / HTTP 响应
Packer.toBlob(doc, ...)Promise<Blob>浏览器下载(配 saveAs
Packer.toArrayBuffer(doc, ...)Promise<ArrayBuffer>浏览器 Web API / 跨线程传输
Packer.toBase64String(doc, ...)Promise<string>内嵌 / 传输
Packer.toString(doc, ...)Promise<string>(ZIP 二进制字符串)兼容旧接口;不是 OOXML 源文本
Packer.toStream(doc, ...)Stream(同步返回)对接 Node 流接口

toStream 外均异步返回 Promise。9.7.1 的 toStream 内部仍先 generateAsync({ type: 'nodebuffer' }),完成后一次发出 Buffer,因此不能据此推断内存峰值更低。prettify 控制包内 XML 缩进;overrides 覆写包内子文件。

三、Document 常用选项

选项类型说明
sectionsarray唯一必填,节数组
creator/title/subject/description/keywordsstring文档属性元数据
stylesobject命名样式(paragraphStyles/characterStyles/default
numberingobject编号方案(config[]
fontsarray内嵌字体({ name, data }
featuresobjectupdateFields(目录字段更新)
evenAndOddHeaderAndFootersboolean启用奇偶页不同页眉脚

四、section 常用属性

属性说明
children块级内容(Paragraph/Table/TOC…)
properties.page.size纸张:{ width, height, orientation }PageOrientation
properties.page.margin页边距(twips)
properties.page.pageNumbers页码:{ start, formatType }
properties.column分栏
headers / footers{ default, first, even }(值为 Header/Footer)

五、Paragraph 常用选项

选项类型说明
textstring纯文本简写
childrenarrayTextRun/ImageRun/Hyperlink 等
headingHeadingLevelHEADING_1~6TITLE
alignmentAlignmentTypeSTART/CENTER/END/BOTH
spacingobject{ before, after, line, lineRule }(twips)
indentobject{ left, right, firstLine, hanging }(twips)
bulletobject{ level }(无序列表 0~8,共 9 级)
numberingobject{ reference, level, instance? }(有序/多级)
stylestring引用命名样式 id
borderobject段落边框
pageBreakBeforeboolean段前分页

六、TextRun 常用选项

选项类型说明
textstring文本内容
bold / italics / strikeboolean粗 / 斜(复数)/ 删除线
underlineobject{ type: UnderlineType, color }
sizenumber字号 half-points(pt×2)
colorstring字色,不带 # 的 hex
fontstring字体名
highlightstring突出显示(预设色名 yellow/green…)
shadingobject底纹 { type, fill, color }(任意 hex)
superScript / subScriptboolean上标 / 下标
allCaps / smallCapsboolean全大写 / 小型大写
breaknumber同段内换行次数
childrenarray可含 PageNumber.CURRENT/TOTAL_PAGES

七、Table / Cell 常用

写法
建表new Table({ rows: [...], width })
new TableRow({ children: [Cell...], tableHeader?, height? })
单元格new TableCell({ children: [Paragraph...] })
横向合并单元格 columnSpan: N
纵向合并单元格 rowSpan: N
宽度width: { size, type: WidthType.XXX }
单元格背景shading: { fill: 'DDDDDD' }
边框borders: { top/bottom/left/right: { style: BorderStyle, size, color } }

八、ImageRun 选项

选项说明
type'png' / 'jpg' / 'gif' / 'bmp' / 'svg'
dataBuffer / 字符串(如 Base64)/ Uint8Array / ArrayBuffer;不含 Blob
transformation{ width, height }(像素)
floating浮动定位(offset 单位 EMU) + wrap 环绕
fallbackSVG 必备的回退位图
altText{ name, title, description }

九、常用枚举

枚举取值(部分)
HeadingLevelHEADING_1~HEADING_6TITLE
AlignmentTypeSTART/LEFTCENTEREND/RIGHTBOTH/JUSTIFIED
WidthTypeDXA(twips)、PERCENTAGEAUTONIL
UnderlineTypeSINGLEDOUBLEDOTTEDDASHWAVE
BorderStyleSINGLEDOUBLEDASHEDDOTTEDTHICK
LevelFormatDECIMALUPPER_ROMANLOWER_LETTERBULLET
PageOrientationPORTRAITLANDSCAPE
ShadingTypeCLEARSOLID
PatchTypePARAGRAPHDOCUMENT

十、单位换算速查

单位用于换算
half-point(半磅)字号 size1pt = 2;12pt → 24
twip(DXA)间距 / 宽度 / 页边距1pt = 20;1 inch = 1440
EMU图片 / 绘图 / 浮动偏移1 inch = 914400;1 cm = 360000
颜色color/fill不带 # 的 6 位 hex(如 'FF0000'

十一、patchDocument(模板补丁)

ts
const keys = await patchDetector({ data: templateBuffer });

await patchDocument({
  outputType: 'nodebuffer',   // 或 'uint8array' / 'blob' / 'base64'
  data: templateBuffer,       // 已有 .docx 模板
  patches: {
    name: { type: PatchType.PARAGRAPH, children: [new TextRun('Ada')] },
    intro: { type: PatchType.DOCUMENT, children: [new Paragraph('整段内容')] },
  },
  keepOriginalStyles: true,
  placeholderDelimiters: { start: '{{', end: '}}' },
  recursive: false,
});

模板默认用 {{tag}} 占位;patchDetector 返回模板中的 key。PARAGRAPH 在原段内替换,DOCUMENT 替换整个段落级元素;placeholderDelimiters 可改分隔符,recursive 控制补丁产生的新占位符是否继续处理。


速查完毕,回 指南 · 基础 理解对象模型,或 指南 · 进阶 看表格/图片/页眉脚实战。