Skip to content
bitzorcas
中EN

Concept

复杂法律文书结构化模板与流式生成

深入解析 BitzOrcas.Platform.Documents 模块:合同协议结构化模板定义、变量动态排版替换、PDF 流式生成与防伪水印嵌入。

Last updated

复杂法律文书结构化模板与流式生成 (Documents Generation Engine)

在严肃的企业商务与律所业务中,自动生成合同、起诉状、保密协议(NDA)和法律意见书是核心高频场景。此类文书对格式排版要求极高:

  • 严格格式排版:字体字号、首行缩进、页眉页脚、签署栏分页防孤行等严谨版面控制;
  • 防伪与版权追踪:在生成的 PDF 背景中动态注入当前查阅人员姓名、工号、租户标识与时间戳构成的倾斜半透明水印;
  • 高吞吐流式输出:大批量文书生成时不得将几百 MB 的文件整体缓存在宿主内存中,必须通过流式(Streaming)管线直写对象存储。

BitzOrcas.Platform.Documents 提供了工业级的结构化文书模板引擎与流式排版生成器。


1. 文书生成架构全景

文书生成管线由四个高度解耦的子系统构成:

持久化与流式分发BitzOrcas 文书渲染引擎业务上下文数据

Matter / Contract 结构化参数 (JSON DTO)

文书母版 (.docx / 结构化 XML AST)

模板语法解析器 (Safe Document Parser)

防伪水印拦截器 (WatermarkInjector)

Word / PDF 流式排版转换器

MinIO / AWS S3 对象存储 (只读存证)

HTTP 200 FileStreamResult (直接流式下载)


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 // 禁用外部实体网络与本地文件解析
};

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%