复杂法律文书结构化模板与流式生成 (Documents Generation Engine)
在严肃的企业商务与律所业务中,自动生成合同、起诉状、保密协议(NDA)和法律意见书是核心高频场景。此类文书对格式排版要求极高:
- 严格格式排版:字体字号、首行缩进、页眉页脚、签署栏分页防孤行等严谨版面控制;
- 防伪与版权追踪:在生成的 PDF 背景中动态注入当前查阅人员姓名、工号、租户标识与时间戳构成的倾斜半透明水印;
- 高吞吐流式输出:大批量文书生成时不得将几百 MB 的文件整体缓存在宿主内存中,必须通过流式(Streaming)管线直写对象存储。
BitzOrcas.Platform.Documents 提供了工业级的结构化文书模板引擎与流式排版生成器。
1. 文书生成架构全景
文书生成管线由四个高度解耦的子系统构成:
2. 核心模板生成契约:IDocumentGenerator
在 BitzOrcas.Platform.Documents.Contracts 中,文书生成服务以纯流式接口对外暴露:
using System.Collections.Generic;using System.IO;using System.Threading;using System.Threading.Tasks;using BitzOrcas.Domain.Results;
namespace BitzOrcas.Platform.Documents.Contracts;
/// <summary>/// 文书渲染输出格式/// </summary>public enum DocumentOutputFormat{ Docx = 1, Pdf = 2}
/// <summary>/// 结构化文书流式生成端口/// </summary>public interface IDocumentGenerator{ /// <summary> /// 根据母版与业务字典,将渲染完成的文书流式输出至目标 Stream /// </summary> /// <param name="templateKey">模板唯一业务编码(如 NDA_COMMERCIAL_V2)</param> /// <param name="parameters">用于插值的强类型业务参数字典</param> /// <param name="outputFormat">期望的输出格式(Docx 或 Pdf)</param> /// <param name="targetOutputStream">目标可写数据流(直写 HTTP Response 或 S3 存储桶)</param> /// <param name="cancellationToken">取消令牌</param> Task<Result> RenderDocumentStreamAsync( string templateKey, IReadOnlyDictionary<string, object> parameters, DocumentOutputFormat outputFormat, Stream targetOutputStream, CancellationToken cancellationToken = default);}3. 防伪水印注入与安全防线
3.1 动态半透明水印注入 (WatermarkInjector)
针对保密合同与内部卷宗,引擎在每页 PDF 底层渲染 45 度倾斜的灰色防伪水印:
防伪水印构成规范:
水印文本 = 租户名称 + " | " + 操作人 + " (" + 工号 + ") | " + 生成时间 (UTC+8)
此水印作为矢量对象直接嵌入 PDF 渲染层,用户无论是屏幕截图还是物理打印,泄密源头均清晰可查。
3.2 严防外部实体注入 (Anti-XXE)
由于 Word 文档(.docx)本质上是由多个 XML 文件组成的 ZIP 压缩包,解析用户上传的自定义模板时存在极大的 XML 外部实体注入(XXE) 风险。
BitzOrcas 的底层 XML 读取器严格强制关闭 DTD 解析与外部资源引用:
var settings = new XmlReaderSettings{ DtdProcessing = DtdProcessing.Prohibit, // 物理禁止 DTD 解析 XmlResolver = null // 禁用外部实体网络与本地文件解析};4. 相关架构决策与进阶推荐 (Related Deep Dives)
- 对象存储:MinIO 与 S3 兼容对象存储架构规范
- 连接器能力:律政协同连接器与外部法务云集成
- 决策溯源:ADR 0002:生产就绪门禁与质量守卫