ADR-0055:保留源包的 DOCX 文字编辑
状态:已接受。
问题
语义导入无法完整表达目录、评论、修订、内容控件和原生表单。先导入再导出会改变未编辑结构,仅配置 PRESERVE 无法恢复已经丢失的源包。
决定
另设 DocxAdapter.editPackage(byte[])。完整验证输入快照后,只在显式选中的正文、页眉或页脚 XML 中替换普通运行文字,不重建其他结构。未改变的条目保持解压字节一致;没有实际修改时返回原 ZIP 字节。改变的 XML 保持 DOM 结构,除选中文字和 xml:space 外不修改属性;不承诺 XML 词法或 ZIP 元数据一致。
字段缓存、评论边界、修订和控件内文字不作为普通文字编辑。复杂边界通过共享策略明确跳过或保留;跨不同运行格式的替换只能显式降级并继承首运行格式。整个请求跳过时回滚先前改动及其损失。字段状态跨段追踪,不把目录缓存误当普通文字。
宏、活动对象、外部资源、危险字段、签名及保护文档没有支持的编辑路径,一律失败。预算、取消和 I/O 不受忽略策略压制。准备保存确切输出,路径使用同目录原子替换,借用流不关闭、不刷新。