前言  ofd文件拆分合并会在多个场合用到,但市面上此类工具并不多。拆分和合并虽然为两个功能,但从编程角度考虑,其处理思路有相同之处。文章就以合并为例,讲一下处理思路。作者也写了一个拆分合并小工具(加入qq群618168615下载),欢迎使用。

程序界面如下:

具有的功能:ofd合并、ofd合并为pdf、ofd批量转pdf。

ofd文件拆分合并思路探索 — 附下载程序-冯金伟博客园

   ofd合并就是将多个ofd合并到一个文件,方便阅读和归档。文档合并只考虑显示部分,非显示部分不考虑;如:大概、元数据、附件;在合并后,就会丢失。ofd文件合并需要考虑的因素有:页,模板、签章、批注等,这些都会影响显示的内容。下面根据这几项逐步分析处理步骤。

1 ofd页处理

    页中包含的id和资源均要做处理。需要处理的项如下:

ID:ofd中的id是不允许重复的,所有的id均要重新赋值。
Font: 指向的是字体名称
ColorsSpace:颜色空间。

  对所有表示id引用的值都要做替换,两个不同的文件可能会用到相同的id,但是其代表的含义是不同的,必须重新赋值,

 ofd文件拆分合并思路探索 — 附下载程序-冯金伟博客园

 2 模板处理

Page页中会有引用模板描述。

ofd文件拆分合并思路探索 — 附下载程序-冯金伟博客园

 Document列出所有的模板列表

ofd文件拆分合并思路探索 — 附下载程序-冯金伟博客园

 首先要对TemplateID重新编码,将模板文件信息写入新的Document中。

3 签章

SignedValue.dat值也要存入新的ofd文件中,在Seal.esl文件缺失的情况下,可以从此文件中读取印章图片。

Seal.esl为印章图片,需要写入新的ofd文件中。

StampAnnot:确定了印章在某页的位置。 PageRef需要重新赋值。

ofd文件拆分合并思路探索 — 附下载程序-冯金伟博客园

 4 批注

   在 Annotations文件中,PageID和FileLoc需要重新赋值。

 ofd文件拆分合并思路探索 — 附下载程序-冯金伟博客园

Annotation文件内容与page内容有点类似。id需要重新赋值。

 ofd文件拆分合并思路探索 — 附下载程序-冯金伟博客园

后记:ofd文件的拆分合并需要将所有的id重新编号,引用此编号的部分也要做相应调整。若完美的实现拆分合并,还是有很多逻辑需要处理。本人已初步编码实现了此功能,可以加QQ群618168615下载程序试用。

专注C#、C++。擅长WPF、WinForm、QT等技术。
研究ofd多年,开发了一些列产品。
技术交流QQ群:618168615。