当前位置: 代码迷 >> PB >> 请教PB怎么操作PDFView.ocx
  详细解决方案

请教PB怎么操作PDFView.ocx

热度:566   发布时间:2016-04-29 10:38:32.0
请问PB如何操作PDFView.ocx?
请问PB如何操作PDFView.ocx?通过ole使用时有哪些属性、事件和函数?

------解决方案--------------------
不知楼主的安装包里是否有示例,我这里有个包里有C# vb等方面的示例,也可以借鉴一下

其实使用tools菜单→browser功能,也可以查看其函数


------解决方案--------------------
建议楼主看下自带的demo
------解决方案--------------------
最近正好在用 ole 打文档,发现这里面名堂蛮多,随便谈几句!

就 pb 的 ole 控件类型来说,分为 3 类:olecontrol, olecustomcontrl, oleobject

从 pb 对象浏览器中的 ole 类型来说亦有三种:olecontrol, olecustomcontrol, programming control
不难发现,和上面非常相似,但最后一个为什么不一样的叫法,下面我会讲到。

从 pb 开发环境中可视化添加 ole 控件的方法说,也分为 3 种:insert new, insert from file, insert control
如果一定要在控件内显示文档的话:第 1 种方法只适合于新增一个文档,无法打开别的文档;第 2 种方法只适合于打开一个固定位置的文档(即席方式);第 3 种方法没有限制,但问题是很多软件并不提供第 3 种类型的控件(比如 word, excel)!再加上 pb 对 ole 的支持一直以来都存在问题,前两种方法极易导致 pb 自身异常或者相关的软件异常,非重装系统难以恢复,令人望而却步!

oleobject 是一种动态 ole 控件,也就是可以连接任意类型的 ole 控件,但由于控件本身的支持问题,oleobject 实际可用的基本上只有 pb browser 中的 programming control 对象以及 olecustomobject 中的不可视对象,其它的虽然连得上也用不起来!

再说明一下什么是 olecustomobject,说白了,就是 ActiveX,它和 olecontrol 有什么不同?olecontrol 分为即席方式(inplace!)也就是在你的控件内打开,离席方式(offsite!)也就是在你的控件外打开,ActiveX 没有这个选择,它必须是控件内打开的。微软为什么要搞这个限制?因为这样的话,ActiveX 就不可以直接利用操作系统创建自己的窗口,而必须依附在宿主程序上,于是 ActiveX 就可以在 iis 服务端和网页脚本结合了!睢,这就是差别,因为限制某种功能而获得了更好的通用性。

上面绕了这么多,其实归纳一下也很简单 olecontrol 类型基本上没有使用的必要,即席激活限制太多不实用,离席激活直接用 oleobject 连接一下就是了,没必要非在窗口上贴个控件。对于可视的 ActiveX(olecustomobject) 必须在窗口贴个控件,再从之个控件操作;对于不可视的 ActiveX,实在想贴也可以,不想的话直接 oleobject 连接。

最后两段代码大致说明一下 oleobject 和 Activex 的调用:
// 打印一个 word 文件
ioo_word = create oleobject
if not ioo_word.IsAlive() then ioo_word.ConnectToNewObject("word.application")
ioo_word.documents.Oopen("c:\test.doc")
ioo_word.documents.Print()
ioo_word.documents.Close()
ioo_word.Quit()
ioo_word.DisconnectObject()

// 打印一个 pdf 文件
olecustomobject iocc_acrobat
iocc_acrobat = w_test.ole_acrobat
iocc_acrobat.LoadFile("c:\test.pdf")
iocc_acrobat.Print()
------解决方案--------------------
漏了个 .object

// 打印一个 pdf 文件
olecustomobject iocc_acrobat
iocc_acrobat = w_test.ole_acrobat
iocc_acrobat.object.LoadFile("c:\test.pdf")
iocc_acrobat.object.Print()