当前位置:首页 期刊杂志

基于OFD格式实现电子文档全流程流转的研究

时间:2024-05-04

李杰 武宏刚

摘要:基于我国自主可控的版式文档格式标准(OFD),对OFD电子文档的全流程流转进行研究。从客户化开发的角度研究做成、流转、审核、查看、打印、保密的可实现方式。

关键词:版式文档;OFD;客户化开发;数字签名;水印;分发

中图分类号:TP311      文献标识码:A

文章编号:1009-3044(2022)08-0090-03

1 引言

版式文档与流式文档是两种不同的文档格式。流式文档以微软的Word文档为例,其内容以流式的方式进行版面编排与内容展示,在中间插入新的内容会导致其后面的内容 “流”到新的位置。流式文档在不同的软硬件环境下展示出来的效果可能会发生变化,即“跑版”的现象;版式文档版面固定、所见即所得,在不同的软硬件下均呈现相同的效果,不会发生流式文档的“跑版”现象,最终展现效果与纸质文件保持一致,是计算机时代的“数字纸张” [1]。

PDF(Portable Document Format) 作为ISO 32000标准,在全世界被广泛采用;在国内,新型的版式文档格式OFD(Open Fixed— layout Document)作为国家标准试点后快速推广。 2016年10月,OFD作为国家标准(GB/T 33190-2016)正式发布,各地纷纷采用OFD格式对电子公文进行归档。

在技术层面上OFD有更多优势:1)OFD格式采用GB/T 18793-2002中的XML技术描述文档数据[2],格式开放、体系简单、数据结构化,最终文件体积更加精简;2)OFD格式拥有完全自主知识产权,不受控于外部厂商,有自主话语权。在标准特性上可进行扩展,满足不同领域的应用需求;3)OFD标准支持国产密码算法,在文档安全性上有更多的可控保证。

基于OFD的格式特点,越来越多的公文、档案、证照、执照、单证凭据开始使用OFD格式作为流转或长期保存的格式[3]。同样,针对企业不同的生产模式,企业内需广泛流传、长期保存的各种版式电子文档,也可以采用OFD格式做成。

2 OFD与PDF的比较

OFD与PDF两种版式文档之间有很多相似之处。

2.1 表现

二者均为版式文档格式,在应用层面上两者有相同的定位[4]。

2.2 标准

OFD与PDF的格式标准均完全开放, OFD为国家标准,拥有完全自主知识产权。

2.3 生成方式

OFD和PDF文件生成方式相同,均可通过以下方式生成:1)通过软件生成空白的OFD或PDF文档,再通过软件提供的功能向文档中添加内容;2)通过成熟产品的虚拟打印机将受支持格式的电子数据,打印转换成所需文档;3)经由扫描设备将纸质文件转换成所需文档。

2.4 使用体验

OFD与PDF均为版式文档,在文档的全生命周期中不同软件提供的解决方案体验大致相同。無论是文档生成阶段、流转阅读阶段、保存归档阶段,针对两种格式的解决方案均提供阅读器、注释工具、安全工具等功能模块,用户针对不同格式的切换几乎没有学习成本。

2.5 适用场景

大多数使用PDF文档的场景都可用OFD文档替代。

3 全流程各阶段的实现方式

企业内电子文档全流程包括图纸文档的做成、审核、查看、打印,保存,以及各阶段的安全保密需求。

3.1 文档的生成

生成OFD文件的途径主要包括使用成熟的OFD生成器或按照标准接口自行开发。

例如福昕出品的OFD软件,可批量将多种格式的电子文档转换成ODF文件。在快速生成OFD文件的同时又保持版面的原样。

如果采用开发的方式,可以使用开源的“OFD Reader & Writer” [5]库创建文档实体,并填入内容,此类库对多项方法进行了封装,使用方便,创建文档示例如下:

public class HelloWorld {

public static void main(String[] args) throws IOException {

Path path = Paths.get("HelloWorld.ofd");

try (OFDDoc ofdDoc = new OFDDoc(path)) {

Paragraph p = new Paragraph("Hello World!");

ofdDoc.add(p);

}

System.out.println(path.toAbsolutePath());

}

}

3.2 文档的审核

OFD文档可以根据企业内部的实际流程及使用需求,定制化开发软件。通过移动、拷贝等方式实现内部的审核流转流程。在流转过程中,可通过OFD格式的原笔迹签批、电子印章、数字签名等技术实现防伪。

以数科OFD阅读器产品为例,可通过产品提供的签批功能进行手写签批。

另外,OFD文档可以实现多种电子印章功能,并可对电子印章进行验证,在文档的审核过程中有效的防止篡改、抵赖、保护审批流程的安全性。

如果采用客户化开发的方式,可以使用开源的“OFD Reader & Writer”库实现客户化的签名功能,例如采用以下方式创建:

public static void main() throws Exception {

Path src = Paths.get("src/test/resources", "helloworld.ofd");

Path out = Paths.get("target/DigitalSign.ofd");

// 1. 構造签名引擎

try (OFDReader reader = new OFDReader(src);

OFDSigner signer = new OFDSigner(reader, out)) {

// 2. 实现电子签章容器

ExtendSignatureContainer signContainer = new YouImpContainer();

// 3. 设置签名模式

//  signer.setSignMode(SignMode.WholeProtected);

signer.setSignMode(SignMode.ContinueSign);

// 4. 设置签名使用的扩展签名容器

signer.setSignContainer(signContainer);

// 5. 执行签名

signer.exeSign();

// 6. 关闭签名引擎,生成文档。

}

System.out.println(out.toAbsolutePath().toAbsolutePath());

}

生成的签名同样可以验证,防止篡改:

try (OFDReader reader = new OFDReader(src);

OFDValidator validator = new OFDValidator(reader)) {

// 1. 实现验证容器

SignedDataValidateContainer dsc = new YouImpContainer(cert);

// 2. 实现验证容器

validator.setValidator(dsc);

// 3. 执行验签验章

validator.exeValidate();

// 4. 如果没有异常抛出说明验证成功。

}

3.3 文档的查看

OFD有多款成熟的阅读器,阅读体验与PDF没有太大的差别,学习成本较低。阅读器可对OFD文档进行注释、标注或者文档页面进行操作。

阅读器也提供了多种主流浏览器的插件,除了在B/S结构中展示,也可以集成到C/S架构中。无论程序采用何种架构进行客户化开发,都能实现阅读查看功能。

3.4 文档的打印

对于OFD文档,要实现打印功能,可以通过阅读器提供的打印功能将文档打印成纸质介质或者其他格式的电子文档,客户化开发中也可以通过调用系统API执行打印功能。

3.5 文档的归档与分发

OFD文档的保存方式与PDF文档相同,在文档审阅完成后即可归档并提供查阅功能。对于需要对外分发的文档,可以使用成熟产品提供分发保护,也可以通过SDK在客户化的程序中实现密码加密、添加水印等自动化操作。OFD 支持国产密码算法及国际密码算法,可有效的防止信息被窃取。

可以使用开源的“OFD Reader & Writer”库在客户化程序中添加水印,实现方式如下:

public void addWatermark() throws IOException {

Path srcP = Paths.get("src/test/resources", "AddAttachment.ofd");

Path outP = Paths.get("target/AddWatermarkAnnot.ofd");

try (OFDReader reader = new OFDReader(srcP);

OFDDoc ofdDoc = new OFDDoc(reader, outP)) {

Double width = ofdDoc.getPageLayout().getWidth();

Double height = ofdDoc.getPageLayout().getHeight();

Annotation annotation = new Annotation(new ST_Box(0d, 0d, width, height), AnnotType.Watermark, ctx -> {

FontSetting setting = new FontSetting(8, FontName.SimSun.font());

ctx.setFillColor(170, 160, 165)

.setFont(setting)

.setGlobalAlpha(0.4);

for (int i = 0; i <= 8; i++) {

for (int j = 0; j <= 8; j++) {

ctx.save();

ctx.translate(22.4 * i, j * 50);

ctx.rotate(45);

ctx.fillText("保密", 10, 10);

ctx.restore();

}

}

});

ofdDoc.addAnnotation(1, annotation);

}

System.out.println(outP.toAbsolutePath().toString());

}

}

除水印外,还可采用密码加密、打印控制、遮蔽信息等方式对文档进行保护。加密技术包括密码加密和证书加密。密码加密可根据需求采用SM系列国密算法,或AES、RC4等国际算法;证书加密通过数字证书对文档进行加密,同样可以根据需求采用SM系列国密算法,或AES、RC4、 SHA1、SHA256、RSA等国际算法。除此之外主流的保护手段OFD格式文档基本都支持[6]。

4 基于OFD的开发

OFD格式采用XML标记语言描述,并采用开放标准。通过参考OFD的标准,可以实现以OFD文档为载体的客户化定制,在开发语言选择上也比较丰富,主流的C++,C#,JAVA,PYTHON等均可进行开发。同时也有较多的开源库可供引用,在定制开发上有很大的灵活性及开放性。

5 结束语

通过对OFD格式及现有成熟解决方案的研究,OFD文档在自主知识产权、技术门槛、数据化结构、网络传输、拓展性、定制化上有一定优势,并且与PDF格式具有很多共性,学习转移成本低。在“自主可控”“国产化替代”的发展趋势下,通过采用OFD格式替代PDF格式,完全可以无缝平移地实现企业内部电子文档客户化全流程流转。

参考文献:

[1] 百度百科.版式文档[EB/OL].[2021-10-15].https://baike.baidu.com/item/%E7%89%88%E5%BC%8F%E6%96%87%E6%A1%A3/6845753?fr=aladdin.

[2] GB/T 33190-2016,电子文件存储与交换格式 版式文档[S].

[3] 王姝,徐华,王少康.OFD版式文档应用研究[J].档案学研究,2019(1):95-100.

[4] 冯辉,李海波,丛培勇,等.OFD与PDF对比分析[J].信息技术与标准化,2016(10):45-48.

[5] Github.ofdwr[EB/OL].[2021-10-15].https://github.com/Trisia/ofdrw.

[6] 馮辉,陈留勇,樊孝龙,等.OFD的安全应用分析[J].信息技术与标准化,2017(11):49-53.

【通联编辑:梁书】

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!