· engineering· 约 21 分钟精读
端侧离线合规台账的长期归档格式工程:PDF/A 一致性约束、自包含归档包与迁移值守
法定保存期动辄数年,而阅读器、字体与系统会先一步换代。本文以密旋科技 TagWorks 与 SlingGuard 的设备本地台账为样本,拆开长期归档的三个失效面——格式过时、渲染依赖与可信性,逐条梳理 ISO 19005(PDF/A)对字体嵌入、设备无关色空间、禁止加密与强制 XMP 标识的约束,给出写端格式约束、自包含归档包、报告摘要入链与迁移值守四条落地工程线,并如实划出格式只管外观重现、不管内容真实的边界。
一、一本要在地下室活七年的台账
地下变电所、粉尘车间、港口货舱。TagWorks 在这里记下对一台电动工具的绝缘与保护接地检测结果,SlingGuard 记下对一副钢丝绳吊索的彻底检查结论。这两类记录都不是写给人当场看的,它们是写给审计看的,而且要看很多年。
电气侧的依据很明确:澳大利亚与新西兰的在用电气设备检测标准要求保留检测与检查记录七年,或者监管机构要求的更长年限,并且明确允许电子形式保存,记录范围涵盖设备总登记册、定期检查与检测记录、维修登记册以及故障设备的处置记录[1][8]。吊装侧的依据同样带期限:英国起重作业法规对记录保存作出规定,附件类彻底检查报告需保存至下一次报告作出之日或满两年,取较晚者,设备类则按其在役状态持续保留[2][6]。
七年是一个足够让技术环境翻几轮的长度。在这段时间里,手机操作系统会跨越多个大版本,用来读文档的软件会被替换或停更,报告里用到的字体可能随系统更新而改变字形甚至被移除,生成报告的那段代码会被重构,甚至承载记录的设备本身也会被淘汰。真正需要回答的问题因此不是”今天能不能打开这份报告”,而是三个更窄也更容易被跳过的问题:七年后、换过两台设备之后,还能不能打开它;还能不能证明它没有被改过;还能不能不依赖某一个厂商的软件,按法定字段把内容取出来。
近一周公开的采购信息里,区域档案管理一体化平台与集团数字档案馆的商用密码应用改造、系统集成项目持续出现。这是一个值得注意的信号:档案的长期可读与可信,正在被当作一项独立的合规工程来处理,而不是”另存为 PDF 就算归档”。端侧离线台账面对的其实是同一类问题,只是它的存储责任完全落在设备一侧。
二、长期归档的三个失效面
把”长期”拆开看,风险并不集中在硬盘会不会坏,而是集中在格式与依赖上。按失效的位置,可以分成三个面。
格式过时。 一个文件今天能打开,取决于今天的软件还认识它的编码方式。专有二进制格式、依赖在线激活或授权校验才能解开的封装、把关键数据藏在注册表之外的位置,都会在几年后变成打不开的理由。离线台账本身没有服务器,但如果归档文件悄悄引用了外部资源、或者需要联网做一次许可校验,那么”离线”就只是当下的假象。
渲染依赖。 即使文件被正确读出,呈现它还需要字体、颜色配置与外部资源。字体没有随文件一起嵌入,阅读器就只能回退到本机安装的字体,字形、字宽与断行位置随之改变,一张按页排布的检测记录可能因此错位。颜色以设备相关的方式描述,同一份报告在不同设备上会显示成不同的颜色。外部资源一旦缺失,页面就出现空洞。
可信性。 这是最容易被格式讨论漏掉的一面。文件能打开,并不等于内容可信:一份报告可以被整体替换,一个数字可以被改写,一条记录的先后顺序可以在重排版中被悄悄调整。格式负责的是”呈现稳定”,不是”内容真实”;后者需要摘要、签名与审计链来承担。
这三面之间没有替代关系:字体嵌好了,不代表格式能长期解读;格式足够稳,不代表内容没被动过。端侧归档工程必须同时处理这三条线。
三、受约束的 PDF:ISO 19005 到底约束了什么
长期归档的一个常见做法,是把报告固化为一个被标准裁剪过的 PDF 子集。这一族标准由国际标准化组织以 ISO 19005 发布,专为页面取向文档的长期保存设计,思路是让文件尽可能自包含、自描述、与设备无关[3][4][5]。
它包含几个部分:第一版基于 PDF 1.4,发布较早,禁止透明叠加;第二版基于 PDF 1.7,放开透明、JPEG 2000 压缩与符合本族规范的附件,并支持 PAdES 数字签名;第三版在第一版的能力上允许嵌入任意格式的文件;第四版基于 PDF 2.0,取消了原有的三级一致性划分,改为引入面向附件封装与工程文档的功能轮廓[3][5]。
一致性级别是另一个必须看清的维度。级别 A 覆盖全部要求,包括文档的逻辑结构(标签树);级别 B 只要求外观可长期重现,是扫描件与纯视觉留档最常用的级别;级别 U 介于两者之间,在级别 B 的基础上额外要求文本能被可靠地提取为一串 Unicode 码位[3][5]。
| 一致性级别 | 覆盖范围 | 适用取舍 |
|---|---|---|
| A | 全部要求,含逻辑结构与阅读顺序 | 需要长期按结构检索或无障碍访问时 |
| B | 仅保证渲染外观可长期重现 | 扫描件与以视觉留档为主的场景,写入成本最低 |
| U | 在 B 的基础上要求文本可提取为 Unicode | 需要复制文字,但暂不需要保留逻辑结构时 |
| 标准部分 | 底层 PDF | 关键能力 |
|---|---|---|
| 第一部分 | 1.4 | 首版,禁止透明与加密,要求全字体嵌入 |
| 第二部分 | 1.7 | 放开透明与 JPEG 2000,允许本族附件与 PAdES 签名 |
| 第三部分 | 1.7 | 允许嵌入任意格式的文件 |
| 第四部分 | 2.0 | 取消三级划分,引入面向附件与工程文档的功能轮廓 |
约束条款本身并不复杂,但每一条都直接改变写端的实现:所有用于渲染的字体程序必须嵌入文件中,且必须是可在任意环境下合法嵌入的字形,不允许依赖阅读器回退到系统字体;颜色必须以与设备无关的方式描述;加密被明确禁止;必须写入基于标准的 XMP 元数据,并在其中标注本文件声明的一致性级别[3][4][5]。此外还有一批容易被忽略的限制:不用 LZW 压缩,不引用文件外部的内容,不使用嵌入的脚本、音频、视频与三维内容。最后一点尤其关键——它是”自包含”这条要求能被真正兑现的前提。
四、端侧落地的四条工程线
(一)写端格式约束
TagWorks 与 SlingGuard 的报告都在设备本地生成:用 Core Graphics 的 PDF 上下文排版,页面取 595 乘 842 点(接近 A4),生成的数据再交给 PDFKit 预览与分享,全程不经过任何服务器。这是一条干净的起点,但默认生成的 PDF 并不等于受约束的归档格式。
要落到 ISO 19005 的要求,写端至少要做四件事。第一,把实际用到的全部字体程序嵌入文件,尤其是中日韩字形——这不是可选项,若不嵌入,阅读器只能回退,字形与字宽都会漂移;同时要确认所用字体的嵌入许可允许无限、通用渲染。第二,颜色以设备无关空间表达,必要时嵌入颜色轮廓,避免直接写入设备相关的取值。第三,在 XMP 元数据里写入标识本文件所属标准部分与一致性级别,让任何合规阅读器都能凭文件本身判断它属于哪一级。第四,避免使用被禁止的结构:不引用外部文件,不使用被排除的压缩方式,并按所选级别回避透明叠加——级别 A 与第一版对透明的限制更严,第二版起才放开。
(二)自包含归档包
格式约束解决的是”一份文件能否长期读”,归档包解决的是”一组材料能否整体迁移”。端侧台账的证据并不只在一张报告里:检测记录、检出照片、检验员签名与登记册快照分布在不同位置。归档要能成立,就必须把它们收进一个可以整体搬走的对象。
TagWorks 现有的备份已经具备这种自包含形态:备份是一个 JSON 文件,内含登记册快照、以文件名为键的 JPEG 照片字典、缺失照片清单与检验员档案,并在恢复时对版本号、照片文件名的安全性以及照片完整性逐项校验——版本不匹配时会明确说明该备份由更新版本创建,而不是勉强读取[7]。这是”可完整还原”的工程基础。
长期归档要在这个基础上再往前一步:把”可完整还原”扩展为”可脱离本应用长期可读”。也就是把报告固化为受约束的格式,把证据附件随包封装,再附一份人可读的清单,逐项列明包内文件的名称、摘要、生成时间与法定保存到期。清单的意义在于,即使若干年后本应用已经停更,一个通用工具也能仅凭清单核对包内容是否完整。
(三)报告摘要入链
可验证性不能只停留在格式层。做法是:归档包内每一份文件都计算摘要,报告本体与清单的摘要一并进入台账的审计链,链条以链式哈希推进:
其中 是第 条记录之后的链摘要, 是第 份文件或记录的字节表示。这里有一条容易做错的细节:报告摘要必须覆盖报告的字节本身,而不是只覆盖它的业务字段。若只对字段求摘要,那么只要字段不变,重新排版、替换页眉、改变页面次序都不会破坏摘要,改动就变得不可见。
端侧实现这一点不需要额外的密码学设施,只需要把摘要计算与记录的写入放在同一条事务里,并保证归档包的生成是一个可重复的确定性过程。收益是确定的:包内任何一份文件被改动一个字节,链上就会出现无法对上的一环,而无需信任任何在线服务。
(四)迁移值守
格式不是一次决定就能永久有效的。渲染器会停更,某一种压缩方式会失去支持,只有把”迁移”当成一件需要留痕的日常事务来处理,归档才谈得上长期。
工程上可以把迁移分成三类,并明确各自的收益与代价:
| 迁移策略 | 做法 | 收益 | 代价 |
|---|---|---|---|
| 原生保留 | 原始文件不再改写,只原样保存 | 零信息损失 | 依赖未来仍有工具能读 |
| 同构迁移 | 升到同一格式的更新版本 | 兼容较新的工具链 | 需重写校验逻辑,细节可能改变 |
| 异构迁移 | 换成另一种更稳的载体 | 获得更长的可读预期 | 语义映射可能丢失字段 |
无论采取哪一类,都保留原始字节:把原始件当作不可变的母本,迁移结果作为派生件另存,并把迁移动作、所用工具与迁移时间写入注记。这样即便某次迁移判断有误,原始件仍然在包里。硬件上,归档包要能被复制到外部介质并随设备一并移交;软件上,迁移不能是静默发生的后台动作,而应是一次有记录、可复核的操作。
五、能力边界
把上述几条线做完,仍然要说清它不能保证什么,否则就会把格式的确定性误读成内容的确定性。
格式保证外观重现,不保证内容真实。 一份被伪造的报告,同样可以做成完全合规的受约束文件。真实性由摘要链与签名承担,而不是由格式承担。这两件事必须分开度量。
级别 B 不保证语义可检索。 它只保证渲染外观能够长期重现;如果要按字段搜索、按结构抽取内容,需要选择更高的级别,而这些级别对写端的要求更高,写入成本也随之上升。
禁止加密与保密需求相冲突。 这一族标准明确禁止文件级加密。当归档需要口令保护时,正确的做法是把加密放在外层容器(例如加密后的归档包),内层文件保持受约束的格式,而不是在文件内部加密——后者会直接使文件失去一致性。
签名与时间仍是能力有限的。 第二版起支持 PAdES 数字签名,但端侧签名受设备私钥保护强度与时间可信性的限制,签名证明的是”某把私钥签过这份字节”,而不是”某个人当时在场”。这一点与端侧时间可信性问题是同一条边界。
迁移时机无法自动判定。 一种格式是否已经过时、何时适合迁移,需要在特定工具链与现场条件下作判断,并留下记录。软件能做的是把原始件、派生件与迁移注记分开保存,让判断有依据可查,而不是替人给出一个自动结论。
责任落在设备侧。 零云端依赖意味着归档的持久性不再由某家在线服务的在地久性担保。这既是隐私上的收益,也是一项长期维护义务:可读性必须由产品自身的格式约束、封装结构与迁移策略来保证,而不能假设某个外部服务会一直替我们保留着它。
六、结语
七年后打开一份报告,考验的其实不是阅读器,而是当初写文件时的约束、打包时的自包含程度,以及有没有留下可以验证与迁移的线索。端侧离线沙盒把数据主权交还给使用设备的人,也把”让它一直能打开”的责任一并交了过来。
这份责任不能外包给某个会下线的服务,只能落实为四件具体的事:把报告写成受约束的格式,把材料打成自包含的包,把每份文件的摘要锚进审计链,把迁移当成一次有记录的操作。四件事都不复杂,难的是承认它们必须由设备自己承担。
参考文献
[1] Standards New Zealand. AS/NZS 3760:2022 In-service safety inspection and testing of electrical equipment and RCDs. https://www.standards.govt.nz/shop/asnzs-37602022
[2] UK Legislation. The Lifting Operations and Lifting Equipment Regulations 1998, Regulation 11 (keeping of records). https://www.legislation.gov.uk/uksi/1998/2307/regulation/11/made
[3] ISO 19005-2:2011. Document management — Electronic document file format for long-term preservation — Part 2: Use of ISO 32000-1 (PDF/A-2). https://cdn.standards.iteh.ai/samples/50655/73a6c1c5b54c44d2b3ad15a048990f84/ISO-19005-2-2011.pdf
[4] ISO 19005-1:2005. Document management — Electronic document file format for long-term preservation — Part 1: Use of PDF 1.4 (PDF/A-1). https://cdn.standards.iteh.ai/samples/38920/f0f121090348465280cfdb8095df04e9/ISO-19005-1-2005.pdf
[5] Library of Congress. PDF/A Family, PDF for Long-term Preservation (Sustainability of Digital Formats). https://www.loc.gov/preservation/digital/formats/fdd/fdd000318.shtml
[6] Health and Safety Executive (UK). Thorough examinations and inspections of lifting equipment. https://www.hse.gov.uk/work-equipment-machinery/thorough-examinations-lifting-equipment.htm
[7] Apple Developer Documentation. UIGraphicsPDFRenderer — Drawing and printing in a PDF context. https://developer.apple.com/documentation/uikit/uigraphicspdfrenderer
[8] NT WorkSafe. Test and tag of electrical equipment (recording results of testing). https://worksafe.nt.gov.au/forms-and-resources/bulletins/test-and-tag-of-electrical-equipment