OFD 是什么?中国版式文档标准 GB/T 33190 全解读

OFD 的定义与背景

OFD(Open Fixed-layout Document,开放固定版式文档)是由中国国家标准化管理委员会发布的版式文档格式标准,标准编号为 GB/T 33190-2016。与 PDF 由 Adobe 公司制定、后成为 ISO 32000 国际标准的路径不同,OFD 是中国自主制定的版式文档国家标准,设计目标是解决版式文档领域的自主可控问题。

版式文档的核心特征是"固定版面"——文档的布局、字体、图片位置在创建时即确定,无论在何种设备上打开都呈现一致的视觉效果。这与 Word、HTML 等"流式文档"形成对比:流式文档会根据屏幕尺寸、字体可用性等因素重新排版,而版式文档锁定版面,确保所见即所得。

OFD 文件采用 XML 描述文档结构,以 ZIP 包形式组织,本质上是一个包含多个 XML 文件和媒体资源的压缩容器。它支持文字、图片、图形、签名、印章、动画等版式元素,能够精确保存文档的版面布局。标准由版式文档产业联盟(OFD 联盟)推动产业化,2016 年正式发布为国家推荐性标准。

自 2020 年起,OFD 在党政机关电子公文系统中被广泛采用,逐步成为政务领域版式文档的事实标准。如今在电子发票、电子证照、电子合同等场景中,OFD 文件越来越常见。理解 OFD 的技术体系,已经成为处理政务文档、对接政企系统的前置知识。


OFD 与 PDF:两种版式文档的技术对比

OFD 和 PDF 都是版式文档格式,功能定位相似——都用于精确保存文档版面、确保跨设备一致性。但两者在技术体系和生态上存在显著差异,理解这些差异有助于在不同场景下选择合适的格式。

维度OFDPDF
格式标准中国国家标准 GB/T 33190-2016ISO 32000 国际标准(源自 Adobe)
文件结构XML + ZIP 容器,结构开放二进制/文本混合,结构相对封闭
使用场景政务公文、电子证照、招投标通用文档、合同、报告、出版物
支持工具数量少,以数科、福昕等国产工具为主生态成熟,Adobe、Foxit 及大量免费工具
签章支持原生支持电子签章,符合国密标准支持数字签名,国密支持需额外适配
国际认可以国内应用为主全球通用

下面的流程图从标准来源、文件结构、应用生态三个维度对比了 OFD 和 PDF 的技术路线:

流程图 1

1. 格式标准

OFD 是中国国家标准,技术规范公开透明,文档结构基于 XML,便于国产化适配和国密算法(SM2、SM3、SM4)集成。PDF 是国际标准,生态最为成熟、全球通用,但在涉密和政务场景下存在自主可控方面的考量。两者并非替代关系,而是面向不同合规要求和应用领域的并行标准。

2. 文件结构

这是 OFD 和 PDF 最本质的技术差异。OFD 文件本质上是 ZIP 压缩包,内部用 XML 描述页面、文字、图片等元素,结构清晰、易于解析。PDF 采用二进制和文本混合的格式,内部由对象、交叉引用表、 trailer 等结构组成,相对复杂。对开发者而言,OFD 的可读性和可解析性更强;对最终用户而言,两者打开后的视觉效果类似。

3. 支持工具

PDF 的工具生态极为丰富,从免费的浏览器内置查看器到专业的 Adobe Acrobat,各种编辑、转换、压缩工具应有尽有。相比之下,OFD 的工具链尚在发展初期,能够查看和编辑 OFD 的软件数量有限,支持 OFD 压缩的工具更是稀缺。这是 OFD 当前生态的主要短板。

4. 签章支持

OFD 原生支持符合国密标准的电子签章和印章验证,签章数据作为独立节点嵌入文档结构,能够满足公文流转中对真实性、完整性和不可抵赖性的要求。PDF 支持基于 PKI 体系的数字签名,但在国密算法适配方面需要额外开发。在政务公文场景下,OFD 的签章体系与国密基础设施的契合度更高。


OFD 的文件结构:XML + ZIP 容器

理解 OFD 的文件结构,是理解其压缩方法和工具生态的基础。与 PDF 的二进制格式不同,OFD 采用了与现代办公文档(如 OOXML、ODF)类似的"XML + ZIP 容器"架构。

容器组织

一个 OFD 文件本质上是一个 ZIP 压缩包。将其后缀名改为 .zip 后解压,可以看到清晰的多层目录结构。最外层包含一个 OFD.xml 入口文件,它声明了文档的基本信息和物理文件路径;内部按"文档(Doc)—页面(Page)—对象(Object)"的层级组织内容。

流程图 2

XML 描述层

OFD 用 XML 文件描述文档的逻辑结构和页面内容。Document.xml 定义文档的页面树、大纲、元数据等;每个页面对应一个 Content.xml,描述该页面的文字、图片、图形、路径等版面对象及其坐标、样式。这种基于 XML 的描述方式带来几个特点:

  • 可读性强:任何文本编辑器都能查看 OFD 的页面描述,便于调试和审计
  • 易于解析:标准 XML 解析器即可读取文档结构,无需专门的二进制解析器
  • 可扩展性好:新增功能只需扩展 XML Schema,不影响已有结构

与 PDF 二进制格式的对比

PDF 采用二进制和文本混合的格式,内部由带编号的对象(Object)组成,对象之间通过交叉引用表(Cross-Reference Table)关联,文件末尾的 Trailer 指向根对象。这种设计在文件紧凑性上有优势,但结构不透明,普通用户无法直接查看内部内容。

两者在压缩层面的差异也很明显:OFD 已经是 ZIP 容器,内部资源经过一层压缩,再次整体压缩收益有限,优化重点在于内部资源(图片、字体);PDF 的压缩则分散在各个流对象(Stream)上,每个流对象可以独立选择压缩算法。


OFD 在政务公文中的应用

OFD 在政务领域的推广有其现实背景。传统政务公文以纸质为主,电子化过程中需要一种能够精确保存版面、支持电子签章、符合国家密码管理要求的版式格式。PDF 虽然功能强大,但作为国外标准,在涉密信息系统中使用存在自主可控方面的顾虑。OFD 作为国家标准,填补了这一空白。

电子公文

全国多地党政机关的电子公文系统已采用 OFD 作为标准格式。公文的起草、审核、签发、分发、归档全流程都以 OFD 文件为载体,配合国密电子签章实现公文的防篡改和可追溯。OFD 的固定版面特性确保公文在不同办公系统间流转时版面一致,不会因字体缺失或软件差异而错版。

电子证照

电子营业执照、不动产登记证、电子身份证等电子证照逐步向 OFD 格式迁移。OFD 文件可以嵌入证照信息、持证人照片、发证机关电子印章,并支持防伪验证。相比纸质证照,OFD 电子证照便于在线核验、批量管理和跨部门共享。

电子发票

部分地区的电子发票已采用 OFD 格式。OFD 发票包含发票代码、金额、税额等结构化数据,同时保留发票的版式外观,既便于人工查阅,也便于机器解析提取信息。OFD 发票的签章机制保证了发票的真实性和不可抵赖性。

随着应用规模扩大,OFD 文件体积问题逐渐显现——大量扫描件、高清印章图片嵌入导致公文动辄数十 MB,给存储和传输带来压力,OFD 压缩需求随之产生。


OFD 压缩方法

OFD 压缩的原理与 PDF 压缩高度相似,核心都是优化文件内部占用空间最大的部分。由于 OFD 本身是 ZIP 容器,文件结构已经过一层 DEFLATE 压缩,因此 OFD 压缩的关键不在于再打一层压缩包,而在于优化内部资源(图片、字体)。

图片重采样

OFD 文件中的扫描件、印章图片通常是体积大头。一份扫描公文可能嵌入多张 300dpi 的高清扫描页,每张数 MB。将高分辨率图片降至合理分辨率(如 300dpi 降至 150dpi),可以大幅减小体积,同时对屏幕阅读和打印的影响在可接受范围内。

重采样需要权衡分辨率与清晰度:政务公文的文字内容在 150dpi 下仍可清晰辨认,但精密印章的细节可能需要更高分辨率。合理做法是根据图片用途分别设置目标分辨率。

字体子集化

OFD 文件嵌入完整字体是为了保证跨设备显示一致,但一份文档通常只用到字体文件中的一小部分字符。字体子集化(Font Subsetting)只保留文档中实际使用的字符字形,丢弃未使用的字体数据。

这一技术对中文文档效果尤其明显。一个完整的中文字体文件通常包含数万个汉字字形,体积可达 10MB 以上;而一份公文实际用到的汉字可能只有一两千个,子集化后字体数据可减少 80% 以上。

清理冗余对象

OFD 包内可能存在未引用的资源和重复对象:编辑过程中删除的图片可能仍残留在资源目录中,多次保存可能产生重复的元数据。清理冗余对象就是遍历文档结构,移除所有未被页面引用的资源,精简文档结构树。

图片格式优化

OFD 支持嵌入多种图片格式,包括未压缩的位图(BMP)和压缩格式(JPEG、PNG)。将未压缩的位图转为 JPEG 等压缩格式,可以直接减少图片资源占用。对于大面积纯色的印章图形,PNG 可能比 JPEG 更小;对于色彩丰富的扫描照片,JPEG 压缩比更高。

下面的代码演示了如何解压 OFD 文件并分析其内部资源占用,这是压缩优化的第一步:


import zipfile
import os
from collections import defaultdict

def analyze_ofd(ofd_path):
    """解压并分析 OFD 文件内部资源占用"""
    with zipfile.ZipFile(ofd_path, 'r') as zf:
        # 统计各类型文件的大小
        type_sizes = defaultdict(int)
        type_counts = defaultdict(int)
        total_size = 0

        for info in zf.infolist():
            ext = os.path.splitext(info.filename)[1].lower()
            type_sizes[ext] += info.compress_size
            type_counts[ext] += 1
            total_size += info.compress_size

        print(f"OFD 文件总大小: {total_size / 1024 / 1024:.2f} MB\n")
        print(f"{'类型':<10} {'数量':<8} {'大小(MB)':<12} {'占比'}")
        print("-" * 45)
        for ext, size in sorted(type_sizes.items(), key=lambda x: -x[1]):
            pct = size / total_size * 100
            print(f"{ext or '(无后缀)':<10} {type_counts[ext]:<8} "
                  f"{size / 1024 / 1024:<12.2f} {pct:.1f}%")

# 使用示例
# analyze_ofd("sample.ofd")

运行这类分析脚本,你通常会发现 OFD 文件中 80% 以上的体积来自图片资源(.jpg.png.bmp),字体文件(.ttf.otf)次之。这印证了 OFD 压缩的核心策略:优先优化图片,其次优化字体。

一个 50MB 的 OFD 扫描公文,经过合理的图片重采样和字体子集化处理后,通常可以压缩到 8-12MB,文字和印章依然清晰可辨,完全满足政务流转和归档要求。


OFD 工具生态现状

OFD 格式虽然国家标准地位明确,但工具生态远不如 PDF 成熟。目前市面能查看 OFD 的软件以数科阅读器、福昕 OFD 等国产工具为主,浏览器原生不支持 OFD 预览,能够对 OFD 进行压缩的工具更是屈指可数。

工具生态的薄弱带来两个现实问题。第一,普通用户拿到一个 OFD 文件后,可能找不到合适的工具打开,需要专门下载阅读器。第二,当 OFD 文件体积过大时,缺乏现成的压缩工具,很多用户只能原样存储或传输,承受存储和带宽成本。

从技术角度看,OFD 基于 XML + ZIP 的开放结构,理论上解析和处理的门槛低于 PDF 的二进制格式。工具生态的滞后更多是市场推广和应用规模的问题,而非技术障碍。随着 OFD 在政务、金融等领域的应用持续扩大,工具链有望逐步完善。


对比表格:OFD 与 PDF 压缩方法

压缩方法OFD 适用性PDF 适用性说明
图片重采样两者体积大头均为图片,降分辨率效果最显著
字体子集化中文文档尤其有效,可减少 80% 以上字体数据
清理冗余对象移除未引用资源和重复对象,精简结构
图片格式优化位图转 JPEG,按图片特性选择最优格式
整体 ZIP 压缩低(已是 ZIP)OFD 已是 ZIP 容器,再压缩收益有限
流对象压缩不适用PDF 独有,每个 Stream 可独立选择压缩算法

常见问题

Q1:OFD 文件可以转成 PDF 吗?

可以。部分 OFD 阅读器和转换工具支持将 OFD 导出为 PDF。但需要注意,转换过程中电子签章等 OFD 特有信息可能无法完整保留,因为 OFD 的国密签章体系与 PDF 的 PKI 签名体系并不完全对应。建议在需要长期归档或法律效力的场景下谨慎转换,转换前做好备份,并验证转换后文档的签章状态。

Q2:OFD 压缩会影响电子签章的有效性吗?

正规的 OFD 压缩只优化图片和字体等资源,不修改签章数据和文档哈希校验信息,因此不会影响电子签章的有效性。但需要注意,签章的完整性校验通常覆盖文档的特定部分,如果压缩过程修改了被签章保护的内容,签章验证会失败。建议使用专业工具并在压缩后重新验证签章状态,确保公文法律效力不受影响。

Q3:普通办公场景需要用 OFD 吗?

一般商务文档使用 PDF 即可,OFD 主要用于政务公文、电子证照等官方场景。如果不涉及政务对接,无需刻意使用 OFD 格式。但如果需要与政府机关交换电子公文、提交 OFD 格式的招投标文件,则必须使用 OFD。两者并非替代关系,而是根据合规要求和应用场景选择。

Q4:OFD 和 PDF 哪个体积更小?

没有绝对结论。文件体积主要取决于内部资源(图片、字体)而非容器格式本身。同等内容下,OFD 的 XML 描述可能比 PDF 的二进制描述略大,但两者都使用压缩,差异通常在可忽略范围内。决定体积的关键是图片分辨率和字体嵌入策略,而非格式选择。一份嵌入大量高清扫描件的 OFD 公文,体积远大于一份纯文本 PDF;反之亦然。


总结

OFD 和 PDF 虽然同为版式文档格式,但代表了不同的技术路线和应用生态:

  • OFD 作为中国国家标准(GB/T 33190-2016),采用 XML + ZIP 的开放容器结构,原生支持国密电子签章,在政务公文、电子证照、电子发票等国内官方场景中地位稳固。其工具生态尚在发展初期,但开放的结构为国产化适配和定制开发提供了便利。
  • PDF 作为国际标准(ISO 32000),采用二进制/文本混合格式,工具生态全球最成熟,在通用办公场景中不可替代。

两者在压缩方法上高度相似——核心都是优化内嵌图片和字体资源。OFD 压缩的四项关键技术(图片重采样、字体子集化、清理冗余对象、图片格式优化)与 PDF 压缩一脉相承,因为版式文档的体积构成规律是相通的。

理解 OFD 的技术体系,关键在于把握它的"XML + ZIP 容器"本质:这是一种开放、可解析、易于国产化适配的版式文档架构,其压缩优化的重点与 PDF 一致,都在内部资源而非容器本身。

相关阅读: