前言 ofd文件拆分合并会在多个场合用到,但市面上此类工具并不多。拆分和合并虽然为两个功能,但从编程角度考虑,其处理思路有相同之处。文章就以合并为例,讲一下处理思路。作者也写了一个拆分合并小工具(加入qq群618168615下载),欢迎使用。
程序界面如下:
具有的功能:ofd合并、ofd合并为pdf、ofd批量转pdf。
ofd合并就是将多个ofd合并到一个文件,方便阅读和归档。文档合并只考虑显示部分,非显示部分不考虑;如:大概、元数据、附件;在合并后,就会丢失。ofd文件合并需要考虑的因素有:页,模板、签章、批注等,这些都会影响显示的内容。下面根据这几项逐步分析处理步骤。
1 ofd页处理
页中包含的id和资源均要做处理。需要处理的项如下:
ID:ofd中的id是不允许重复的,所有的id均要重新赋值。
Font: 指向的是字体名称
ColorsSpace:颜色空间。
对所有表示id引用的值都要做替换,两个不同的文件可能会用到相同的id,但是其代表的含义是不同的,必须重新赋值,
2 模板处理
Page页中会有引用模板描述。
Document列出所有的模板列表
首先要对TemplateID重新编码,将模板文件信息写入新的Document中。
3 签章
SignedValue.dat值也要存入新的ofd文件中,在Seal.esl文件缺失的情况下,可以从此文件中读取印章图片。
Seal.esl为印章图片,需要写入新的ofd文件中。
StampAnnot:确定了印章在某页的位置。 PageRef需要重新赋值。
4 批注
在 Annotations文件中,PageID和FileLoc需要重新赋值。
Annotation文件内容与page内容有点类似。id需要重新赋值。
后记:ofd文件的拆分合并需要将所有的id重新编号,引用此编号的部分也要做相应调整。若完美的实现拆分合并,还是有很多逻辑需要处理。本人已初步编码实现了此功能,可以加QQ群618168615下载程序试用。
专注C#、C++。擅长WPF、WinForm、QT等技术。
研究ofd多年,开发了一些列产品。
技术交流QQ群:618168615。