OFD标准介绍
什么是OFD
OFD(Open Fixed-Layout Document) 是电子文件管理的基础标准之一,由于其固定版式呈现的特点,各类文档排版后的固化结果都可使用本标准来承载 ;同时对于各行业管理中有关元数据、语义、数字签名等要求,本标准也提供相应的可扩展机制予以支持。OFD作为基础标准在版式文档范畴内反映了行业管理要求,提供了足够的扩展性,与行业应用中的标准规范是并行的,各行业规范只在版式文档存储格式方面引用本标准。OFD版式文件具有以下特点:
(1)采用XML技术描述文本数据,采用“容器+文档”的方式描述和存储数据;
(2)真实地保持原有文档中文字、图表、公式、色彩等版式信息,且这种特性不随平台变化而改变;
(3)采用二维向量图像模型,可以描述包括文字、图形、图像等经过精密排版的页面像素;
(4)国家层级的自主版式格式,实现了文档的原始内容和批注附加内容的分离保存
OFD学习资源
可在国家标准全文公开系统预览《GB∕T 33190-2016 电子文件存储与交换格式 版式文件》标准内容;
OFD格式转换:北京数科网维文档转换预览,福昕OFD版式办公套件安装完成后可通过虚拟打印机转换为OFD格式,永中DCS
在OFD文件中添加档案章
准备工作:档案章图片(生成细节略)、OFD文件、Visual Studio IDE
OFD文件解压
可将文件后缀名改为zip再解压以查看OFD文件的层次结构。实际编码中需要引入System.IO.Compression.ZipFile包。
文件 | 说明 |
OFD.xml | 文件主人口文件,一个包内存在且只存在一个OFD.xml 文件,此文件名不应修改 |
Doc_0/Document.xml | 文档的根节点 |
Doc_0/DocumentRes.xml | 文档自身资源索引 |
Doc_0/PublicRes.xml | 文档公共资源索引 |
Doc_0/Pages/Page_0/Cotent.xml | 文档第0 页的内容描述 |
Doc_0/Res/seal.png | 文档资源文件 |
ZipFile.ExtractToDirectory(ofd文件路径, 解压目录);
读取相关数据
注意:OFD标准中XML文档使用的命名空间为http://www.ofdspec.org/201 6,其标识应为ofd;应在包内各XML文档的根节点中声明defaults:ofd。元素节点应使用命名空间标识,元素属性不使用命名空间。
有些厂商转换的OFD文件命名空间为http://www.ofdspec.org或其它,因此需要根据文件指定的命名空间来读取和写入数据。
ID | XML文件 | XPath | 数据 |
1 | OFD.xml | ofd:OFD/ofd:DocBody/ofd:DocRoot | 主入口文件路径 |
2 | Document.xml | ofd:Document/ofd:CommonData/ofd:MaxUnitID | 文档全局自增ID |
3 | Document.xml | ofd:Document/ofd:CommonData/ofd:DocumentRes | 资源文件路径 |
4 | Document.xml | ofd:Document/ofd:Pages/ofd:Page[1] | 首页路径 |
5 | DocumentRes.xml | ofd:Res/ofd:MultiMedias/ofd:MultiMedia/ofd:MediaFile[text()='seal.png'] | 档案章图片名称 |
6 | DocumentRes.xml | ofd:Res/ofd:MultiMedias/ofd:MultiMedia/ofd:MediaFile[text()='seal.png']/.. | 档案章图片资源ID |
7 | Content.xml | ofd:Page/ofd:Area/ofd:PhysicalBox | 页面尺寸信息 |
写入数据
(1) 将六格档案章图片复制到解压目录相对路径Doc_N/Res下,Doc_N由数据1决定;
(2) DocumentRes.xml文件ofd:Res/ofd:MultiMedias路径下创建子元素MultiMedia,DocumentRes.xml路径由数据3决定,并自增数据2写入ID属性;
(3) 在上一步MultiMedia节点创建子元素MediaFile;
(4) Content.xml文件ofd:Page/ofd:Content/ofd:Layer路径下创建子元素ImageObject,Content.xml路径由数据4决定,并自增数据2写入ID属性;其中Boundary、CTM由数据7计算得出,需将图片像素先转换为毫米再进行计算,ResourceID为第(2)步的自增ID;
(5) 更新Document.xml文件ofd:Document/ofd:CommonData/ofd:MaxUnitID值为数据2;
(6) 保存以上所有修改
OFD文件打包
打包并删除临时解压文件
ZipFile.CreateFromDirectory(解压路径, ofd文件路径);
Directory.Delete(解压路径, true);