使用LibreOffice Draw编辑嵌入到Office(Word、PPT)文档中的OLE Visio图形

本篇文章废话略多,希望知道方法的可以直接看末尾。

Visio是MS推出的一款绘图工具,简单易用。但是从某个版本开始,Visio从Office套件中独立出来,成为了一个单独的软件,需要单独购买。通常,我们从各种渠道购买到的打折Office套件都是不包含Visio的,独立销售的Visio价格并不便宜,如果只是为了偶尔编辑一些带Visio图形的文件,单独购买Visio并不划算。好在我们有LibreOffice,其中的Draw支持读取Visio格式的文件,并且可以实现和Visio类似的功能。

如果用过Visio的话,会知道Visio可以直接编辑嵌入到Word/PowerPoint文档中的Visio图。最近我正好有这样一个嵌入Visio图的文档需要处理,可是在实际操作时发现在用LibreOffice的时候并不能直接编辑嵌入的Visio图形,如果把图形复制并粘贴到Draw中的话,图形只是一个矢量图,只能调整大小,并不能进行任何编辑。

研究一番发现这个Visio图是采用OLE技术嵌入到文档中的,实际上就是把一个Visio文件打包到了文档中。因此解决这个问题的关键就是要把嵌入到文档中的Visio文件提取出来。好在新版的Office文档都是开放的格式,本质上就是一个压缩包,所以我们可以直接用解压工具将文档解压。找到解压出的embeddings文件夹,里面会看到很多名字都是oleObjectXX.bin形式的文件,这些其实就是嵌入到文档中的OLE对象本体。文件扩展名都是统一的bin,因此并不方便通过预览来找到要编辑的Visio文件,但是文件的编号是按照OLE对象在文档中出现的顺序排列的,因此可以通过编号来定位到某一个OLE对象,并通过Draw对其完成编辑。

在解压文档时还可以发现在media目录下有很多emf矢量图文件,而且图片的内容正是Visio图形转成的矢量图,从这里可以猜测出MS在实现OLE的时候,不仅将OLE本体嵌入到了文档中,同时也生成了一张矢量图嵌入到文档中,这样即使缺少相应的OLE对象依赖的组件,也可以保证内容被正确显示,只是无法编辑。

方法总结:
1.将文件保存为新版Office文档格式(docx、pptx、xlsx等);
2.使用解压缩软件将文档解压;
3.找到embeddings文件夹,根据文件编号和文档中OLE对象的出现顺序找到需要编辑的文件;
4.在LibreOffice Draw中打开这个文件并进行编辑;
5.LibreOffice Draw不能直接输出Visio文件,因此可以将图形输出为emf/wmf矢量图或gif/png等带半透明的图片格式并插入原始文档中。

CC BY-NC 4.0 本作品使用基于以下许可授权:Creative Commons Attribution-NonCommercial 4.0 International License.

发表评论

电子邮件地址不会被公开。 必填项已用*标注