Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 2632|回复: 2

(zt)基于Lazarus的跨平台Office集成技术研究

[复制链接]

该用户从未签到

发表于 2012-2-23 16:57:31 | 显示全部楼层 |阅读模式

导读::分析了在Lazarus应用程序中跨平台集成OpenOffice组件对象的实现技术。结合具体实例,应用UNO和COM自动化技术实现了Lazarus开发的应用软件与OpenOffice软件的各组件功能的高度整合。
论文关键词:Lazarus,OpenOffice.org,COM,UNO

  1
引言
  随着操作系统平台多样化的发展,需要在不同的平台上调用集成一定的Office功能。传统的MS Office+Windows
API不具备跨平台能力,本文因此提出基于Lazarus和OpenOffice的跨平台集成技术解决方案。OpenOffice是一套跨平台的Office办公软件套件,能在Windows,Linux,MacOS和Solaris
等操作系统上执行。它与当前各个主要的Office软件套件兼容。
  Lazarus是一种基于FreePascal的可视化、跨平台的快速开发工具,具有强大的可视化控件和面向对象程序设计特性。Lazarus可以工作在Linux,BSD,Windows等不同操作系统以及Gtk,Qt等不同窗口管理环境下。由于Lazarus支持多种操作系统计算机论文,可以实现
“一次编写,到处编译”,对多种平台有完全通用的编译器,可以为不同的平台开发相同的产品。利用Lazarus创建的应用程序可以在不同操作系统环境中跨平台编译使用。
  2
COM集成OpenOffice对象技术
  2.1 COM自动化技术
  COM 的全称是 Component Object
Model,即组件对象模型。COM
Automation是微软推出的一套通用组件标准,它基于可执行的二进制代码的。COM是解决应用程序间相互连接通信问题的一种技术,能够从应用程序的内部自动控制另—个程序。它由客户端和服务器两部分程序组成。其中Client程序是操作者和控制者,能够主动地访问其他应用程序。服务器程序则包含了一系列的对象,它们通过展示自己包含的方法和属性,即自动化对象的外部公共成员函数和共有数据域,从而使外部Client程序访问这些组件对象。
  简单地说,在COM集成OpenOffice对象过程中,OpenOffice作为COM
Automation服务器, Lazarus应用程序则作为COM
Automation客户端。然后在Lazarus应用程序可以通过这一系列COM自动化对象可以来调用OpenOffice完成指定功能。
  2.2
OpenOffice对象模型
  OpenOffice.org提供了数百种服务。为了提供这些服务的概要信息,已将这些服务合并为模块,这些模块相互联系形成完整的体系结构。在OpenOffice中,很多模块嵌套在另外一个模块中,各个对象模型之间的联系形成层次结构中国论文下载中心。OpenOffice对象模型的层次结构如图1所示,所有的模块嵌套在一个最高级的模块com.sun.star中,这个模块相当于MS-Office中的Application对象计算机论文,com.sun.star
表达式是指 OpenOffice.org 服务,然后是模块名称(如
frame),最后是实际的服务名称(如Desktop)。其他对象则由高一级的对象派生。



  
  2.3 Lazarus代码实例
  uses
   SysUtils, Variants,
ComObj;
  const
   OpenOffice =
'com.sun.star.ServiceManager';
  var
   Application : Variant;
  
Desktop : Variant;
   Properties : Variant;
   Document : Variant;
  
begin
   if Assigned(InitProc) then
   TProcedure(InitProc);
  
try
   Application :=CreateOleObject(OpenOffice);
   except
  
WriteLn('打开OpenOffice异常.');
   Exit;
   end;
   Desktop :=
Application.CreateInstance('com.sun.star.frame.Desktop');
   Properties :=
VarArrayCreate([0,-1], varVariant);
   //新建空白电子表格
  Document :=
Desktop.loadComponentFromURL('private:factory/scalc', '_blank', 0, Properties);
e{E\YEc
  end.
  3 UNO Bridge集成OpenOffice对象技术
  3.1 UNO概述
  
UNO的全称是Universal Network
Objects,即统一网络对象。UNO是Sun设计的一个组件模型,它提供了不同的编程语言,不同的对象模型,不同的机器架构,不同的进程之间的互操作性,无论是应用在局域网或者是互联网。UNO与COM技术类似,是一种跨平台跨语言的组件模型技术,主要支持的开发语言有C++、Java和OpenOffice.org
Basic,同时,借助微软的COM技术,其他语言也可以使用。另外,UNO还可以同Python、JavaScript等各种脚本语言进行绑定。
  3.2
UNO Bridge对象模型
  UNO的角色类似于COM、CORBA 或Java
RMI,它是分布式对象之间进行通信的一个规范,可以用来控制OpenOffice.org套件的各个对象。UNO的结构规范采用的是“接口与支持类”方式,而不是“实现-继承”方式。“接口与支持类”方式意味着对象只通过接口进行通讯,支持类被用来提供实现,如图2。这样的设计思路是可以实现组件与环境、语言、和版本的高度无关。UNO的通信是基于对接口的调用计算机论文,UNO
Bridge提供必要的手段来使用实现环境与UNO对象之间的接口。UNO桥的关键是在于弥补一个中间环节,称为二进制的UNO,即包括二进制数据参数和返回值的格式。在一般情况下,调用桥通过一个单一的调度方法。这种方法是,一切必要的转换通过派遣方法代理生成或不生成代码存根,实现进程间的桥梁,或解释型语言桥梁。由于OpenOffice的组件技术能够使用桥接方式访问其他组件,因此可以将办公组件集成进不同的环境中,如GNOME、KDE和Mozilla。
  



  3.3 UNO Bridge代码实例
  基于Lazarus调用以下Python脚本:
  # Test UNO
via Python macro run within OO.
  import uno
  def TestUno():
   contxt
= uno.getComponentContext()
   sermgr = contxt.ServiceManager
   desktop =
sermgr.createInstance('com.sun.star.frame.Desktop')
   doc
=desktop.loadComponentFromURL('private:factory/scalc ', '_blank', 0, Array
())
  sheet = doc.sheets (0)
   cell = sheet.getCellByPosition (0,0)
  
cell.String =”Test Uno”
  Lazarus调用Python脚本的方法这里不做详述,可参考Python for
Delphi项目。
  4
结语
  以上代码已在Lazarus-0.9.28+OpenOffice-3.0中测试通过。通过这些代码所使用的COM和UNO技术Lazarus应用程序可以实现在不同的操作系统平台上的Office组件功能的集成。在跨平台的应用和开发上,Lazarus和OpenOffice这样的一系列开源软件较现有的一些商业软件提供了更好的互操作性、更易用的程序接口,而这种开放的跨平台集成技术将使办公软件这一工具的生产力更进一步。

参考文献
[1]Dale
Rogerson. Inside COM: Microsoft'sComponent Object Model[M]. Microsoft
Press.1999,3
[2]DON BOX,潘爱民译. COM 本质论[M]. 北京:中国电力出版社. 2001, 79~
116.
[3]David M. Beazley. Python EssentialReference[M].
Sams.2006,2
[4]陈羽淏,严超,吴知,江水.OpenOffice的分析研究[J]计算机工程, 2002, (11) .

[5]王书斌,朱松苗.Openoffice的编译分析与研究[J]苏州大学学报(工科版), 2005, (02)
.
[6]李映,朱斐.OpenOffice.org文档结构的研究与分析[J]. 计算机技术与发展, 2006, (10) .

评分

参与人数 1威望 +6 收起 理由
bugxiong + 6 Lazarus社区有你更精彩!

查看全部评分

回复

使用道具 举报

该用户从未签到

发表于 2012-2-23 20:46:10 | 显示全部楼层
Lazarus社区有你更精彩!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-2-24 13:08:33 | 显示全部楼层
学习,有示例就更好了
谢谢楼主分享
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 03:11 , Processed in 0.055780 second(s), 13 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表