将Markdown文件转换为DOCX格式,支持浏览器和Node.js
markdown-docx
安装
# 使用 npm
npm install markdown-docx
# 使用 yarn
yarn add markdown-docx
# 使用 pnpm
pnpm add markdown-docx
NODEJS用法
import fs from 'node:fs/promises';
import markdownDocx, { Packer } from 'markdown-docx';
async function convertMarkdownToDocx() {
// 读取 Markdown 内容
const markdown = await fs.readFile('input.md', 'utf-8');
// 转换为 DOCX
const doc = await markdownDocx(markdown);
// 保存文件
const buffer = await Packer.toBuffer(doc);
await fs.writeFile('output.docx', buffer);
console.log('转换完成!');
}
convertMarkdownToDocx();
浏览器环境
import markdownDocx, { Packer } from 'markdown-docx';
async function convertMarkdownToDocx(markdownText) {
// 转换为 DOCX
const doc = await markdownDocx(markdownText);
// 生成下载文件
const blob = await Packer.toBlob(doc);
// 创建下载链接
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'document.docx';
a.click();
// 清理资源
URL.revokeObjectURL(url);
}
// 示例:配合文本域使用
document.getElementById('convert-btn').addEventListener('click', () => {
const markdown = document.getElementById('markdown-input').value;
convertMarkdownToDocx(markdown);
});
高级用法
使用 MarkdownDocx 类
通过MarkdownDocx
类实现更精细的控制:
import { MarkdownDocx, Packer } from 'markdown-docx';
import fs from 'node:fs/promises';
async function convertWithOptions() {
const markdown = await fs.readFile('input.md', 'utf-8');
// 创建带配置的转换器
const converter = new MarkdownDocx(markdown)
// 生成文档
const doc = await converter.toDocument({
title: '我的文档',
creator: 'markdown-docx',
description: '由 Markdown 生成'
});
// 保存文件
const buffer = await Packer.toBuffer(doc);
await fs.writeFile('output.docx', buffer);
}
配置选项
MarkdownDocx
构造函数和markdownDocx
函数接收如下配置参数:
选项 | 类型 | 默认值 | 说明 |
---|---|---|---|
imageAdapter | 函数 | 内置适配器 | 自定义图片处理器 |
ignoreImage | 布尔值 | false | 是否忽略图片 |
ignoreFootnote | 布尔值 | false | 是否忽略脚注 |
ignoreHtml | 布尔值 | false | 是否忽略内联 HTML |
gfm | 布尔值 | true | 启用 GitHub 风格 Markdown |
同时支持marked库的额外配置选项。
命令行工具
提供 CLI 工具进行文件转换:
# 全局安装
npm install -g markdown-docx
# 基础用法
markdown-docx --input input.md --output output.docx
# 简写形式
markdown-docx -i input.md -o output.docx
未指定输出文件时,默认使用输入文件名并添加.docx
后缀。
图片适配器
内置自动下载图片的适配器,可通过实现ImageAdapter
接口创建自定义适配器。 适配器需包含getImage
方法,接收图片 URL 并返回包含图片数据的 Promise。
const imageAdapter: (token: Tokens.Image) => Promise<null | MarkdownImageItem>
样式定制
通过样式组件自定义 DOCX 外观:
import { styles, colors, classes, numbering } from 'markdown-docx';
// 示例:修改超链接颜色
styles.default.hyperlink.run.color = '0077cc';
styles.markdown.code.run.color = '000000';
可参考src/styles
目录下的文件编写自定义样式:
- styles.ts- 文档默认样式
- colors.ts- 颜色定义
- markdown.ts- Markdown 专用样式
示例
更多示例请查看仓库中的tests 目录。