OpenXml 文档编辑(Aegis.Documents.Editing.OpenXml)
Aegis.Documents.Editing.OpenXml 负责编辑 Word 文档本身。它更适合做模板填充、表格增删和批量编辑,而不是直接生成 PDF。
组件概览
| 字段 | 说明 |
|---|---|
| 组件名称 | OpenXml 文档编辑 |
| 真实类库 | Aegis.Documents.Editing.OpenXml |
| 组件定位 | Word 文档内容编辑与模板填充 |
| 默认接入方式 | 通过 文档处理(Aegis.Documents) 一起装配 |
| 主要接口 | IWordDocumentEditor |
| 主要用途 | 占位符填充、表格行增删、批量编辑 |
| 常见配套 | LibreOffice 文档转换 |
什么时候重点看这页
适合场景:
- 你要先填充 Word 模板,再让用户下载
.docx - 你要按业务数据增删 Word 表格行
- 你要先编辑 Word,再继续转 PDF
最小使用示例
填充占位符模板
public async Task<byte[]> BuildVisitSummaryAsync(
Stream templateStream,
IWordDocumentEditor editor)
{
return await editor.FillTemplateAsync(templateStream, new Dictionary<string, string>
{
["PatientName"] = "张三",
["VisitNo"] = "ZY20260318001",
["DoctorName"] = "李医生"
});
}
往表格里追加一行
var newDocumentBytes = await _editor.AddTableRowAsync(
documentStream,
tableIndex: 0,
cellValues: new[] { "药品A", "2", "20.00" });
删除表格中的某一行
var newDocumentBytes = await _editor.DeleteTableRowAsync(
documentStream,
tableIndex: 0,
rowIndex: 3);
最常见的组合用法
OpenXml 最常见的实际链路不是单独使用,而是:
- 先用
IWordDocumentEditor生成或修改.docx - 再用
IWordToPdfConverter转成 PDF
var wordBytes = await _wordDocumentEditor.FillTemplateAsync(templateStream, placeholders);
await using var wordStream = new MemoryStream(wordBytes);
var pdfBytes = await _wordToPdfConverter.ConvertAsync(wordStream, DocFormat.Docx);
接入后怎么确认生效
通常用下面几项验收:
IWordDocumentEditor可以正常注入- 占位符文本能被正确替换
- 表格行增删后,生成的
.docx可以被 Word 正常打开 - 接着转 PDF 时,编辑后的内容仍然存在
常见问题
占位符没有被替换
先检查两点:
- 占位符字典里的键是否和模板里一致
- 传入的是否是实际模板流,而不是已经被读空的流
这页是否等同于“Word 转 PDF”
不是。OpenXml 负责编辑 Word 文档内容;真正做 Word 转 PDF 的是 LibreOffice 文档转换。