利用VC实现Word预览功能
通过VC实现word文档预览功能,即仅让浏览,不让复制、编辑和保存。
总体思路是:先调用office的ole接口,将word文档转换为pdf;再利用swtools将pdf转换为swf;最后利用VC自带的activeX控件shockwaveflash object(flash.ocx)来播放swf。
转换的过程稍微有一点点延迟,最后的浏览效果还是可以的。
之所以要这么转来转去的原因在于:
(1)在网上没有找到officeole接口的介绍,不知道能不能直接实现打开word文档禁止复制、编辑和保存,更不知道如何做;
(2)在网上找到了一个CPdf类可以在将Pdf播放器嵌入VC中,但是它需要安装adobeacrobat(或adobe acrobat reader)并且将它们的全部菜单都集成进来了,无法对其进行修改;
(3)网上面有人说类似百度文库的预览效果都是通过转换为flash实现的,于是研究了一下flash的实现效果,发现可行。但是在网上没有找到能够直接从word转换为swf的工具(也没有深入去找),找到了SWFTools,免费、体积很小,但只能实现pdf、jpg等少数几种格式的转换。
结合以上几点,最终形成了本文这种稍微有点繁琐的转换方案。
下面详细介绍一下实现过程(本文的编程环境为vs2003.net):
(一)利用office的ole接口实现word转pdf
(1)在类视图中点击鼠标右键,选择添加类。
(2)在弹出的“添加类”对话框中选择“类型库中的MFC类”
(3)点击“打开”,在弹出的“从类型库添加类向导”对话框中,选择“文件”,点击“位置”后的“…”按钮选择文件路径。
(4)选择MSWORD.OLB路径。我的环境是WinXP,office2010,对应的路径是:C:\ProgramFiles\Microsoft Office\Office14。
(5)在“从类型库添加类向导”对话框中,选中_Application、_Document和Documents接口,点击“>”按钮,生成CApplication、CDocument0和CDocuments类。点击完成,至此office的ole接口导入完成。
(6)编写转换代码
首先,在stdafx.h中添加对前述几个类的声明:
其次,在Capp类中添加启动ole服务的代码:
最后,在功能函数里添加如下转换代码:
至此,已经实现了word文档转换为pdf。
(二)利用SWFTools将pdf转换为swf
搜狗百科对SWFTools的介绍:SWFTools是一种实用工具与AdobeFlash文件(SWF文件)工作的集合。该工具集包括用于阅读的SWF文件,结合他们,和他们建立从其他内容(如图像,声音文件,视频或源代码)程序。 SWFTools是在GPL下发布的。
下载地址为:http://www.pc6.com/softview/SoftView_51612.html
它是一个软件合集,里面有jpg、avi、pdf等好几种格式转换为swf的工具,总共的体积容量为13.9M。实际上,我们只需要里面的pdf2swf.exe这个小软件,其大小为6.3M,位置在SWFTools的安装路径下(本文的路径为C:\ProgramFiles\SWFTools\pdf2swf.exe)。
调用pdf2swf实现pdf向swf转换的功能代码如下:
注意,由于Program Files文件夹名中有空格,WinExec命令不能识别,故将pdf2swf.exe文件拷贝到了C:\WINDOWS目录下了。
至此,实现了pdf向swf的转换。
(三)swf的显示
(1)插入一个对话框,专门用来显示文档的浏览效果。删除对话框上的所有控件。再对话框上点击鼠标右键,选择“插入ActiveX控件”。
(2)在弹出的“插入ActiveX控件”对话框中,选择“ShockwaveFlash Object”控件。该控件是VS2003.net自带的,在VC6.0中也有。添加控件后,调整控件尺寸。
(3)在ShockwaveFlash Object控件上点击鼠标右键,选择添加变量,添加一个m_flashPlayer变量。点击确定后,IDE自动生成一个CShockwaveflash1类。它对应一个.h和一个.cpp文件。
(4)添加显示swf文件的功能代码
至此,显示swf的功能实现了。
IDE生成的CShockwaveflash1类开放了全部的消息映射接口,用户可以完全自主地对其进行修改调整,比如禁用右键菜单、自定义右键菜单、设置播放模式等等等等。这也是为什么选择转换为swf格式进行显示的一个重要原因。
(完)