2005年08月08日

 

利用dataset relationshipsscript设计有subreport的报表

  1. 在工程中添加两个报表文件

Add New item方式,一个命名为rptMain,为主报表,一个命名为rptSub,subreport,想获得的效果如下。



  1. 设计报表

  1. 添加 GroupHeader/Footer sectionrptMain.

  2. group header做如下修改:

    1. 名字改为 ghCompanies

    2. DataField 改为 CompanyName

    3. GroupKeepTogether property All

  1. 再次添加 GroupHeader/Footer section rptMain.

  2. group header做如下修改:

  1. 名字改为ghOrders

  2. Change the DataField to OrderDate

  3. Change the GroupKeepTogether property to All

  1. 添加下面的控件到rptMain,并按指示命名控件:

    Control

    DataField

    Name

    Text/Caption

    Section

    Location

    TextBox

    CompanyName

    txtCompanyName

    Company Name

    ghCompanies

    0, 0

    TextBox

    OrderDate

    txtOrderDate

    Order Date

    ghOrders

    1, 0

    TextBox

    RequiredDate

    txtRequiredDate

    Required Date

    ghOrders

    3.5, 0

    TextBox

    ShippedDate

    txtShippedDate

    Shipped Date

    ghOrders

    5.5, 0

    Label

    (Empty string)

    lblOrderDate

    Ordered:

    ghOrders

    0, 0

    Label

    (Empty string)

    lblRequiredDate

    Required:

    ghOrders

    2.5, 0

    Label

    (Empty string)

    lblShippedDate

    Shipped:

    ghOrders

    4.875, 0

    Subreport

    (Empty string)

    Subreport1

    (Empty string)

    Detail

    0, 0

  2. 添加 GroupHeader/Footer sectionrptSub.

  3. group header做如下修改:

  1. 名字改为 ghOrderDetails

  2. DataField 改为 [order details].orderID

  1. GroupHeader section部分添加如下控件:

    Control

    Name

    Text/Caption

    Location

    Label

    lblUnitPrice

    Unit Price

    4.375, 0

    Label

    lblDiscount

    Discount

    5.5, 0

    Label

    lblProductName

    Product Name

    0.0625, 0

    Label

    lblQuantity

    Quantity

    3.25, 0

    Line

    Line1

    (Empty string)

    X1 = 3.1875

    Y1 = 0

    X2 = 3.1875

    Y2 = 0.1875

    Line

    Line2

    (Empty string)

    X1 = 4.3125

    Y1 = 0

    X2 = 4.3125

    Y2 = 0.1875

    Line

    Line3

    (Empty string)

    X1 = 5.4375

    Y1 = 0

    X2 = 5.4375

    Y2 = 0.1875

    Line

    Line4

    (Empty string)

    X1 = 0

    Y1 = 0.1875

    X2 = 6.5

    Y2 = 0.1875

  2. Detail section部分添加如下控件:

Control

DataField

Name

Text/Caption

Misc Details

Location

TextBox

ProductName

txtProductName

Product Name

(Empty string)

0.0625, 0

TextBox

Quantity

txtQuantity

Quantity

(Empty string)

3.25, 0

TextBox

order details.UnitPrice

txtUnitPrice

Unit Price

OutputFormat = Currency

4.375, 0

TextBox

Discount

txtDiscount

Discount

OutputFormat = Currency

5.5, 0

Line

(Empty string)

Line5

(Empty string)

(Empty string)

X1 = 3.1875

Y1 = 0

X2 = 3.1875

Y2 = 0.1875

Line

(Empty string)

Line6

(Empty string)

(Empty string)

X1 = 4.3125

Y1 = 0

X2 = 4.3125

Y2 = 0.1875

Line

(Empty string)

Line7

(Empty string)

(Empty string)

X1 = 5.4375

Y1 = 0

X2 = 5.4375

Y2 = 0.1875

Line

(Empty string)

Line8

(Empty string)

(Empty string)

X1 = 0

Y1 = 0.1875

X2 = 6.5

Y2 = 0.1875

  1. rptMain报表中添加脚本

  1. 点击report toolbar上的修改脚本图标。

  1. 添加如下代码

[C#]
int cnt;

public void Detail_Format()

{

System.Data.DataRow dr = null;

if(((System.Data.DataSet)rpt.DataSource).Tables["orders"].Rows.Count>cnt)

{

dr = ((System.Data.DataSet)rpt.DataSource).Tables["orders"].Rows[cnt];

cnt++;

}

DataDynamics.ActiveReports.ActiveReport rptSub = new DataDynamics.ActiveReports.ActiveReport();

rptSub.LoadLayout(rptPath);

((DataDynamics.ActiveReports.SubReport)rpt.Sections["Detail"].Controls["SubReport1"]).Report= rptSub;

((DataDynamics.ActiveReports.SubReport)rpt.Sections["Detail"].Controls["SubReport1"]).Report.DataSource = dr.GetChildRows(((System.Data.DataSet)rpt.DataSource).Relations["Order_Details"]);

3.点 OK 继续.

4.在rptSub报表中添加脚本

[C#]

int cnt;

public void Detail_Format()

{

cnt++;

if(cnt % 2 == 0)

{

rpt.Sections["Detail"].BackColor = System.Drawing.Color.White;

}

else

{

rpt.Sections["Detail"].BackColor = System.Drawing.Color.BlanchedAlmond;

}

}

5.进行主程序设计

    1. 获得dataset,参考getDataSet方法

    2. 组建脚本,给rptMain传递subreport路径,详见buildScript函数,注意路径必须使用正斜线(/),而不是反斜线(\),否则脚本报错。(实际设计报表时,subreport可能不止一个,可以根据需要来调用buildScript,增加参数传递)

    3. 加载主报表,指定路径,datasetdataMember(即表名),调用预览窗体预览报表。

6.一些注意事项

  1. 如果subreport中有参数(参数的设置方法为“<%para%>”),需要把subreportShowParameterUI property改为false(如果你的确希望它弹出窗口,可以保留设置不变)

  2. 建立dataset时不要忽略了dataRelation,因为在主表的脚本中需要根据该relationships来格式化subreport的输出。

  3. 因为报表脚本中不能使用using,所以如果要使用到特定的类,需要把完整的namespace也写上,可以在IDE中书写脚本,然后拷贝到脚本编辑器里。

2005年08月07日

目录

摘要 2

中国专利申请状况 3

中国专利申请XML概述 4

SIPO XML DTD 4

缺陷 5

需求与概念 6

用户 6

OpenOffice.org相关特性 7

定制化过程 10

分析SIPO XML DTD 10

XSLT转换 10

校验SIPO XML DTD与用户界面定制化 12

品牌再包装的工作 14

结论 16

致谢 17

许可证 18

  1. 摘要

随着互联网络的迅速发展,世界专利申请正在向具有自定义专利XML文件格式的电子申请系统迁移。与欧洲、美国、日本和国际知识产权组织一起,中国国家知识产权局也定义了它自己的专利XML文件格式(试行),开始运行了电子申请系统。但是对于中国的专利申请人、代理人和审察员来说,依旧缺乏一件高可用的、稳定的而且性价比高的专利XML著作软件。

OpenOffice.org是一个可以与主流办公软件相媲美的免费的生产力套件。它具有高稳定性、跨平台、免费、足够可用等优点。OpenOffice.org使用XML作为其原生文件格式,并支持XSLT过滤器导入和导出外部的、第三方、或者用户定制化的XML文件格式。因此OpenOffice.org是定制中国专利编辑器的一个很好的候选者。

本文主要介绍的就是这个将OpenOffice.org定制为中国专利编辑器的项目。

  1. 中国专利申请状况

中国专利局成立于1980年,其目的是为了保护知识产权,鼓励发明和创新,帮助推广发明及其应用,促进科技发展和创新。1998年中国专利局更名为国家知识产权局1。但是早在1984年,中国就颁布了《专利法》,并于1985年开始实施。1992年和2000年该法又经过两次修订。

随着1985年《专利法》生效,中国的专利申请数量逐年大幅度增长。1985年的全年专利申请数量只有14372件,到了2000年总数量就超过了一百万件。2002年的年专利申请数量实际为252632件,并于2003年超过了三十万件。20043月,国家知识产权局收到了第两百万件专利申请。

与此同时,中国也加入了世界上的专利合作。1980年中国加入了建立世界知识产权组织的条约,中国现在也是很多国际性专利保护协议和条约的成员国。就在中国于1994年加入《专利合作条约》之后,它成为了该组织的申请接收局、国际检索机构和预审查机构。汉语也成为了专利合作条约组织的工作语言之一。

为了提高效率、缩减申请人和专利局的成本,很多国家正在或者已经部署了电子专利申请系统。日本专利局已经拥有了很高的电子申请比例,欧洲专利局、美国专利商标局和世界知识产权组织也正在部署它们的电子申请系统,它们的DTD都是以《专利合作条约》(PCTXML DTD2为基础的。中国国家知识产权局试行自己的相对简单的专利XML DTDSIPO3的同时,也于2004313日启动了电子申请系统4

但是实际上电子申请系统不可能在一夜之间解决所有的问题。

一个问题是,在国家知识产权局启动电子申请系统之前,已经存在了超过两百万件用纸介质保存的专利申请。专利局已经耗费数百名职员用超过半年的时间将其转换成计算机文件。但是用这种方法他们只是被转换成了纯文本、图片或者文字处理文件,还没有含有专利特有的语义信息。

另一个问题是国家专利申请中的常用著作工具是微软的Word。它既不能直接保存为SIPO XML文件格式,也不存在任何外部工具将其转换为SIPO XML文件。而且微软的Word价格非常昂贵,专利申请人和代理人要么会面对高昂的软件成本,要么会面临软件盗版的侵权诉讼风险。所以非常必要和迫切的是设计和实现一个SIPO XML的著作和转换工具,特别是针对其复杂的权利要求书和专利说明书部分。



  1. 中国专利申请XML概述

包括国际专利合作条约组织、欧洲专利局、美国专利商标局、日本专利局和中国知识产权局在内,所有的专利电子申请系统的XML DTD都是由专利申请文档和其它辅助性文档和表格(例如收费单、包裹清单、分发列表、收据等)的数据类型定义构成。其中最重要的也是最复杂的就是专利申请文件。

SIPO XML DTD中,所有的辅助文档都设计为一组简体中文DTD所定义的XML文件格式。因为当初它们只是给中国人使用而没有考虑到国际专利合作,这些DTD根本就没有用英文描述。

SIPO实现一套电子申请系统的工具,并遵循这些简单的辅助文档的定义其实并不是非常困难,然而对于专利申请文档来说情况则完全不同。

    1. SIPO XML DTD

1SIPO XML DTD所定义的专利申请文档的基本结构。


1 SIPO XML DTD基本结构





1 SIPO XML DTD基本结构




  • <management>表示其管理信息,例如申请号、可能的专利号和各个部分的页数等。

  • <abstract>表示专利申请说明书的摘要,由一个或多个段落构成。在这些段落之前,可能还有一个标题。

  • <claims>表示权利要求书,由一个或多个权利要求项组成,在此之前也可能有一个标题。

  • <wo-description>或者<national-description>但不是两者都有,表示专利申请的主体部分:

    • <wo-description>表示该专利申请是“国际专利合作条约”(PCT)申请,包括:技术领域、背景技术介绍、发明概要、附图简要说明、最佳实现方式、应用领域等六个部分,或者是一大部分散文形式的描述文字。在所有这些部分或散文形式的描述之前还可以有一个发明标题。

    • <national-description>表示其为中国国内专利申请,包含专利描述文字和在此之前的一个可选的发明标题。

    • <description>由标题、段落、图片和各种空白(例如换页、换行、制表和空格符)组成。

  • <drawings>表示附图、化学式、数学式、表格及其简要的、无修饰的标注。

  • <appendix>由附录说明和它之前的一个可选的标题组成。

由于国家知识产权局在启动电子申请系统之前已经接收了超过两百万件专利申请,并且在1994年加入PCT之前已经运行了大约10年,所以它具有自己的申请审查流程并且自行设计了自己的XML DTD

虽然如此,SIPO XML DTD也并不是完全和WIPO PCT XML DTD及其它XML格式完全无关。在SIPO XML DTD中,W3C MathML 2.05被用来表示数学公式,CML 1.06用来表示化学公式,Exchange Table Model DTD,也就是OASIS技术备忘录 TR 9901:19997(完整的CALS表模型DTD的交换子集的XML表示,OASIS技术解决方案 9503:1995)用来表示表格。这三个模块同样被世界知识产权组织的PCT XML DTD直接和间接地采用。

    1. 缺陷

不幸的是,这个SIPO XML并不是只表示逻辑数据而不含表现形式的经典的XML方言。SIPO XML不但定义了专利申请的逻辑及其相关的数据内容,而且定义了基本的表现形式,例如各种空白、对齐、字体样式、宽度、高度等等。但是它并没有定义其它表示样式的元素和属性,例如缩进、页面样式和段落样式,这样通过SIPO XML并不能完全决定它的专利XML文件的表现形式。这种方式和其它的专利XML相同,也产生了相同的问题。不可能由一个SIPO XML文件创建唯一确定的表达方式,因为它包含了某些模糊区域,这样不同的软件对其可以有完全不同的定义和实现。

建立专利电子申请系统的一个目标就是电子化地管理专利数据,更多重视专利内容和逻辑数据本身而不是它们的表现形式。因此更好的方式是调整SIPO XML:只定义逻辑数据,同时提供转换用的XSLTXSL-FO定义和工具,如果有必要将其以统一的格式打印或出版的话。

另一个问题是SIPO XML在某些元素上是定义不完整的。例如数学公式并不能如W3C MathML 2.0中定义的那样包含进来,因为SIPO XML中的<mathml>元素只是定义成了一个字符串。

还有一个问题是不一致,以权利要求书和列表为例。在SIPO XML的定义中,权利要求包含一个或多个权利要求项,但是很古怪的是权利要求同时也可以包含列表。而且对于权利要求项来说,它们可以包含一个或多个段落,这相当不错。但是对于列表项来说,他们不能包含段落而只能是#PCDATA这样的块数据,或者子列表。所以列表项实际上不能包含几个被子列表分隔的、顺序的段落,这也是相当古怪的。

幸运的是国家知识产权局已经意识到了这类问题,并决定在将来的版本中解决它们。

  1. 需求与概念

国家知识产权局希望这个电子申请系统具有如下的特性:

  1. 它可以在电子申请系统中编辑专利说明书和权利要求书。由于SIPO XML DTD是逐渐演变的,所以该软件必须有可扩展性;

  2. 它支持隐式地定义版面样式的元素和属性;

  3. 它能以可接受的方式指定内容和逻辑数据的元素和属性;

  4. 它可以在编辑过程中追踪XML树,在针对SIPO XML DTD校验出错时如有必要通知用户,帮助其创建验证的文档;

  5. 它可以在任何需要时显示出XML树结构;

  6. 它可以定义多种表现形式,至少对专利说明书和权利要求书是这样;

  7. 它可以接受其它程序创建的对象,并将其转换为图片;

  8. 它可以和其它为特定XML方言(如MathML)开发的著作工具交互;

  9. 它可以将遗留的微软Word和纯文本文档转换为SIPO XML文件,通过提问、回答和向导等同用户交互的方式也是可以接受的。

该系统预期将会运行在用户熟悉的微软Windows系统上,由具有同微软Word软件相似用户体验的、成熟的文字处理软件为基础开发而成,作为其插件或者定制化。

    1. 用户

很明显,用户已经习惯的字处理软件--微软Word,已经在很大程度上“限制”了他们。微软Word允许其用户自由地写下他们的文档,但是XML著作工具将无可避免地给用户加以更多的限制。每一个微软Word的用户都可能有他或她自己的写作习惯和方式,但是在一种XML著作工具中很可能将只有有限的、甚至只有一种方式著作XML文档。所以很清楚地,不可能这个新的专利XML著作工具一发布,每一个专利申请人都会喜欢并且迅速适应它。

实际上,SIPO XML著作工具的用户可以分为三大类:

  • 发明人或申请人:他们对相关的技术领域相当熟悉而且可能经常撰写技术文章。他们通常在专利申请中使用各种材料,比如文字、工程图形、数学或化学公式、程序代码和生物保藏信息。

  • 专利代理人:他们非常熟悉作为法律文件的专利文档,但是对相关的技术内容就比较陌生。为了撰写申请材料,他们必须从专利申请人和其它渠道那里组织材料,甚至为国外申请人翻译成中文。所以他们很可能会误解或错误表述材料中的隐含信息,比如建立或者保持用空格符号分隔的表格。

  • 专利审查员:他们接收并审查来自于发明人、专利申请人和代理人的专利申请资料。他们并不著作SIPO XML文档,但是他们可能会改正这些材料中的轻微错误。他们也负责将遗留的纸质专利档案电子化并将旧文件转换成SIPO XML文档。

    1. OpenOffice.org相关特性

幸运的是OpenOffice.org具有几乎所有的必要特性来满足国家知识产权局的需求。

OpenOffice.org 1.1起,它就包含了一个支持导入、导出外部的、用户自定义的、第三方XML文件格式的XSLT过滤器架构8。这个XSLT过滤器架构实际上来源于XMerge9项目,该项目是为了支持编辑PalmPocketPC这样的小型数字设备上的富格式文档,并且能够将这些文档合并回OpenOffice.org的能力。XMerge项目用Java实现,同时通过Apache Xalan-J支持具有自定义DTDschema的第三方XML文档格式和OpenOffice.org XML10文件之间的转换。

2是一个OpenOffice.org基于XSLT的过滤器架构XSLT的过滤器架构的过滤器架构的简单演示。在导入过程中,由导入过滤器中的XML解析器解析外部XML文件,由XSLT转换程序转换为OpenOffice.org XML格式,然后由XML导入器导入到内部文档模型中。导出过程基本上相反。


2 OpenOffice.org基于XSLT的过滤器架构


只要导入和导出的转换逻辑,也就是XSLT转换脚本程序实现了,并且外部XML文件类型的必要配置信息注册了,这个基于XSLT的过滤器也就完成了。DocBook11是一个很流行的科技文章和书籍的XML文件格式。OpenOffice.org已经实现了将DocBook导入和导出OpenOffice.org的基于XSLT的文件过滤器。文字处理应用中还集成了一个DocBook的文档模板,这是因为需要为DocBook命名一些特殊的样式,据此XSLT脚本才知道如何在第三方XML DTDschemaOpenOffice.org XML DTD的元素和属性之间映射,这一过程可能会通过复杂的递归、计算和转换来进行。


2 OpenOffice.org基于XSLT的过滤器架构


只要导入和导出的转换逻辑,也就是XSLT转换脚本程序实现了,并且外部XML文件类型的必要配置信息注册了,这个基于XSLT的过滤器也就完成了。DocBook11是一个很流行的科技文章和书籍的XML文件格式。OpenOffice.org已经实现了将DocBook导入和导出OpenOffice.org的基于XSLT的文件过滤器。文字处理应用中还集成了一个DocBook的文档模板,这是因为需要为DocBook命名一些特殊的样式,据此XSLT脚本才知道如何在第三方XML DTDschemaOpenOffice.org XML DTD的元素和属性之间映射,这一过程可能会通过复杂的递归、计算和转换来进行。

虽然现在对于OpenOffice.org来说在其运行时建立外部XML文件格式的同步更新的XML结构树还不容易,但是它的SDK程序可以针对外部XML DTDschema进行一定的校验。如此在转换和校验的顺序上就产生了两个完全不同的流程。

3中所示的就是SIPO XMLOpenOffice.org XML之间的XSLT转换,与OpenOffice.orgSDK程序针对SIPO XML DTD校验的两个完全相反的流程。


3 XSLT转换与SDK程序校验SIPO XML DTD的方案比较


(a)序列表示的是XSLT转换在SDK程序针对SIPO XML DTD校验前进行,而(b)序列表示SDK程序针对SIPO XML DTD的校验在XSLT转换前进行。


3 XSLT转换与SDK程序校验SIPO XML DTD的方案比较


(a)序列表示的是XSLT转换在SDK程序针对SIPO XML DTD校验前进行,而(b)序列表示SDK程序针对SIPO XML DTD的校验在XSLT转换前进行。

让我们来分析一下在导入和导出过程中的这两个序列。

在导入SIPO XML文件的过程中,如果应用(a)序列,从SIPO XMLOpenOffice.org XMLXSLT转换就要先执行。这是相对简单的。但是这种方式实际上是假设SIPO XML文件是没问题的、或者干脆忽略任何可能的不合校验的部分,这是因为对于XSLT脚本来说几乎不可能预测、检测或者发现文件中随机或任意出现的不合校验的情况。即使它可以检测某些错误,由XSLT脚本来执行负担也太过沉重,很难保证可接受的效率。所以这些输入文件不得不被假设成肯定会通过校验的SIPO XML文件。结果是,根本不可能由接下来的SDK程序实现的针对SIPO XML DTD的校验过程发现任何可能的不合校验,这是因为经过先前的XSLT转换,文档已经存在于OpenOffice.org内部文档模型中了,它们要么被过滤了,要么就是直接被忽略了。

导出的过程非常相似。一旦通过XSLT转换程序导出了SIPO XML文件,就不可能有任何的不合校验可能会被针对SIPO XML DTDSDK程序检验出来了。

所以对于(a)序列来说,这样的把XSLT转换和SDK程序针对SIPO XML DTD的校验组合的方法是不适当的。

那么(b)序列又如何呢?

在导入过程中,由OpenOffice.orgSDK程序进行的针对SIPO XML DTD的校验过程是在XSLT转换之前的。所以对于SDK程序来说,在导入至OpenOffice.org内部文档模型之前针对SIPO XML DTD校验外部文件是相当容易的。而后也可以轻松地将SIPO XML转换为OpenOffice.org XML

然而,导出过程会更复杂一点。如果我们希望能够在XSLT转换之前由SDK程序进行针对SIPO XML DTD的校验,就必须将SIPO XML DTD内容硬编码进SDK程序中,这是因为此时XSLT转换仍未执行、文档内容仍然是OpenOffice.org XML格式。内在的原因是基于XSLT的过滤器架构采用的不是DOM接口而是SAX流的方式,因此对于SDK程序来说就很难在文档仍然在OpenOffice.org内部文档模型的时候建立外部XML文件格式的动态XML树。这个差别就使得对于当前的OpenOffice.org来说支持针对任何外部XMLDTDschema的实时校验都会非常困难,除非这个XML树结构完全由OpenOffice.orgSDK程序自身创建和维护。

(b)序列还有另外一个优点:XSLT转换和用SDK实现的针对SIPO XML DTD的校验可以被不同的工程师并行地实现。这样在苛刻的时间表上就避免了更大的风险。

在对这两个可选方案认真地考虑和比较之后,我们选择了(b)序列方案。但是实际的将OpenOffice.org定制化为XML著作工具的过程远比这个原型分析复杂地多。

  1. 定制化过程

    1. 分析SIPO XML DTD

对于第三方的开发者来说,理解和掌握SIPO XML DTD的要旨并不是一件非常容易的事情,因为它既没有完整的文档,也不是一套完整的数据类型定义,它甚至不是一套自恰的数据类型定义。但是这类外部XML文件格式很可能经常会在项目中出现。

最有效的理解方式就是讨论、讨论、再讨论。在分析SIPO XML DTD的过程中,工程师们和SIPO的技术专家举行了很多次技术会议,从起初的几乎每周一次到后来的如果有必要就召开。在我们有任何技术问题的时候,我们都可以直接和他们取得联系,迅速地解决问题。

我们流程上另一个优势是我们可以将XSLT转换和用SDK程序实现的针对SIPO XML DTD的校验并行地实现,甚至我们可以通过内部讨论这些DTD以将其弄地更加清楚。

    1. XSLT转换

SIPO XMLXSLT转换包含三个主要部分:导出和导出的XSLT脚本程序,OpenOffice.org Writer中的SIPO XML文件模板,以及相关的配置信息。

实际上导入、导出的XLST脚本和模板可以被打包到含有配置信息的JAR包中,独立地发布出去由用户自己安装。这对于日后更新SIPO XMLXSLT转换程序非常有利。但是对于第一次发布软件来说,这个XSLT转换程序必须要集成进安装包里去,这样用户可以容易地一次性安装。

4显示的是配置SIPO XML过滤器的一个属性页对话框。其中文件类型和过滤器的名称都是“SIPO XML”,应用是以“China Patent Editor”重新品牌化的Writer,文件扩展名是“patxml”,文档类型(在另一未显示的属性页上)是SIPO XML DTD所声明的根节点“patdoc”。由于SIPO XML DTD是由四个模块组成,而且其实并没有直接用在XSLT转换过程中,所以它最终没有在配置信息中定义或包含。

为了把SIPO XML转换程序原生地加入OpenOffice.org的安装包,有三个模块:filterofficecfgscp需要作改动。

  • filter模块中,需要创建一个名为“sipoxml”的目录并加入导入、导出XSLT文件,一个模板文件,和makefile.mk文件。该模块下的prj/build.lst也需要做相应修改。

  • officecfg模块中,目录 registry/data/org/openoffice/Office 中的 TypeDetection.xcu 需要做修改以加入文件类型和过滤器名为“SIPO XML”的相关配置项。

  • scp模块中,inc/gid.inc, source/office/dir.scp, source/office/javafilter/*_javafilter.scp都需要做修改以加入新的SIPO XML过滤器信息。为了使SIPO XML模板在安装后能够立即出现(通常XSLT过滤器的模板不会立即出现是因为它们并不在正常的模板目录中),source/office/files.scpmodules.scp也需要做必要的改动。


4 SIPO XML过滤器配置对话框


这个SIPO XML模板为SIPO XML过滤器形成了一个框架,如此以来,必要的SIPO XML元素和属性就可以映射为OpenOffice.org XML元素和属性并在这两者之间转换。


4 SIPO XML过滤器配置对话框


这个SIPO XML模板为SIPO XML过滤器形成了一个框架,如此以来,必要的SIPO XML元素和属性就可以映射为OpenOffice.org XML元素和属性并在这两者之间转换。

  • 管理ID、申请号和专利号映射为用户定义的元数据,为了区分是国内申请还是PCT申请加入了“申请类别”信息。

  • 摘要、权利要求、说明书、附图和专利申请的总页数声明为用户变量输入域,另定义了两个域“doc_pic_dir_name” and “image_suffix_max”是为了满足SIPO XML文件对于图片操作的需求,后文中将会提及。

  • 为了遵循国家知识产权局关于如何写作专利申请材料的规定,特别定义和声明了若干汉字字体。特定字体下的SIPO XML文件表现可以确保它们严格统一的显现,但这不可避免的将其锁定于特定的字体供应商。

  • 为了映射SIPO XML的段落、标题、章节、图形类型、权利要求和列表等内容为OpenOffice.org XML的相应内容,定义了特殊的段落、标题、页面、页眉、页脚、图形、列表样式及其相关的属性。为那些SIPO XML DTD中未定义的属性,也就是知识产权局实际操作中所说的“规则”,我们也在OpenOffice.org XML的样式中定义了缺省的属性。用户必须手工地将正确的样式应用于内容。

另外还有几个非常困难的问题,以至于不可能通过简单的映射将其对应到OpenOffice.org XML的元素和属性上。

  • SIPO XML DTD中的<literal><program-listing>表示原始格式的文本,包含空格、制表、换行等格式字符。但是所有这些格式控制符在OpenOffice.org XML文件格式中都是通过特殊定义的元素来表示的。为多个关键字递归和迭代调用字符处理模板可以解决这个问题但是相当地复杂,很容易造成栈溢出并导致程序崩溃。这不是一个好主意。我们最终将其映射为OpenOffice.org XML中的段落,并且在转换回SIPO XML的时候,在正常的内容元素内包含了一个<literal><program-listing>元素来解决这个问题。用这种方式至少我们可以把必要的数据保存下来并保持文件依旧通过SIPO XML DTD的验证,但是有一些信息冗余并存在潜在的问题。

  • SIPO XML中表格的纵向单元格合并是通过<entry>元素的@morerows属性来表示的,这和OpenOffice.org XML中用“子表”元素来表示的方式相当地冲突。由于在纯粹SAXXSLT脚本的限制,几乎不可能在内存中建立一个表格数据结构在这两种表格表达方式间转换。所以我们现在只实现了SIPO XML表格中单元格的横向合并,纵向的单元格合并留待以后改进,这很可能会涉及到Apache Xalan XSLT处理器的Java扩展应用。

  • 为了映射SIPO XML中的无序、可相互包含的文字属性:<overscore><underscore><smallcaps><italic><bold><superscript><subscript>XSLT脚本中的相关模板包含了应用其自身的递归调用。例如,匹配<bold>的模板应用了匹配<smallcaps>的模板,又应用了匹配<underscore>的模板,如此一个一个的模板应用下去,直到最终应用了一个匹配纯文字的模板为止。

  • SIPO XML文件中的图片都是来自于一个特殊命名的子目录中的排序的图片文件,但是OpenOffice.org可以嵌入也可以链接图片。因此当OpenOffice.org保存SIPO XML文件的时候,所有的嵌入图片都必须转换为特殊命名的子目录中的链接图片。这些转换为链接图片文件的嵌入图片依序命名,排在那些现有的链接图片之后。OpenOffice.orgSDK程序在将嵌入图片和外部链接图片转换为正常的链接图片的过程中发挥了很大作用。自动将对象转换为图片的功能将会在未来实现。

    1. 校验SIPO XML DTD与用户界面定制化

如上所述,针对于SIPO XML DTD的校验是在XSLT转换之前进行的,因此不得不将SIPO XML DTD硬编码进那些校验用的SDK程序中。实际上这些OpenOffice.orgSDK程序由两部分组成:入口的OpenOffice.org Basic宏程序,和被调用的由UNO IDL定义的、用Java程序实现的UNO组件。

在这个案例中:

  • OpenOffice.orgBasic宏程序作为针对SIPO XML DTD校验进程的入口,并且执行一些简单的工作,例如寻找空段和连续空格、检查是否指定了正确的样式、调用XSLT转换程序导出SIPO XML文档。

  • Java编写的SDK程序则处理更复杂的工作:逐字逐句地检查样式中的属性是否被正确指定,知识产权局的各种规则是否被严格遵守,并以交互式的方式指导用户纠正错误。为了将内嵌式的图像转换为链接图像,其中也包含了图像过滤器和Base64解码程序,这是通过创建临时性的OpenOffice.orgXML文件、解压缩和抓取图像来实现的。

知识产权局发现的一个问题是,对于几十页、甚至几百页长的专利申请说明书文档来说,仅仅为了校验一次SIPO XML DTD就花费几分钟甚至更长的时间是不可接受的。但是SIPO XML DTD和那些缺省规则是相当严格的。例如,连续空格和空段是不允许存在的,所有的内容必须指定为定义的样式。然而用户经常会敲入连续空格或者空段,忘记给内容指定知识产权据所定义的样式。所以一旦校验程序发现了这类错误,警告消息就会报告给用户。如果用户没有在开始校验程序之前小心地指定样式、编辑文档,他们将会遇到似乎是无休止的、烦人的警告消息。

鉴于知识产权局的建议,检查空格和空段的程序被单独从校验进程主干中提取出来而前置,这样用户就可以先检查它们,然后再是其它部分。通过这种方式平均校验时间大大缩短,用户体验也得到了提高。

知识产权局后来提出的另一个问题是,当用户无意识地删除了每个章节标题前不可见的分节符时,对于他们来说想要恢复到正常的文档结构相当困难。因为实际上每个章节标题都是与一套针对该节的、具有不同标题、页眉、页脚、自定义起始页编号域的主页面和页面主样式捆绑起来的。这个章节结构不可能通过简单地通过菜单项再插入一个新的分页符来恢复。虽然实际上最简单的、也是最好的方法就是一旦该结构被破坏,就按Ctrl+Z组合键取消上一次的操作,但是普通用户不可能了解足够的文字处理文档结构的知识,很可能已经被版面混乱而吓坏了。

所以我们特地为用户创建了若干按钮和菜单项,用来一章一节地、从头至尾地重建整个文档结构。

5显示的是定制化的OpenOffice.org程序的一个截图。菜单条、标准工具条和格式工具条都定制为只显示必要且有用的项目和组件,以避免任何可能的误解和不必要的复杂性。工具条完全是为重构整个文档结构、跳转到章节标题、针对SIPO XML DTD的特定部分和缺省规则校验文档的目的而重新设计。


5 校验SIPO XML DTD和图形用户界面定制化





5 校验SIPO XML DTD和图形用户界面定制化




    1. 品牌再包装的工作

“中国专利编辑器”品牌再包装的工作相对简单,这是因为国家知识产权局愿意和开放源码社区合作,并且表现出对自由和开源软件、缩减软件总持有成本的浓厚兴趣。

在此友好的精神下,替换OpenOffice.org图标的工作就从再包装的工作里剔除出去,因此只有四个模块需要做修改:

  • 为了修改安装、闪现介绍和关于的图像,创建了同OpenOffice.org中同样大小的:readlicense_oo模块中source/cinema/目录下的 sipo_product.bmpoffmgr模块中res/目录下的sipoabout.bmpsipointro.bmp

  • 为了修改许可证和导读信息,readlicense_oo模块中source/license/wnt/目录下的license.txtlicense.htmlsource/readme/wntmsci8/目录下的readme.txt包含了知识产权局所提供的文字。

  • 修改offmgr模块中source/offapp/intro/目录下的ooo.src以改变全局变量$OOO_VENDOR$OOO_INTRO的值,以及在OpenOffice.org的“帮助-关于”对话框中显示简体中文信息。

  • 修改scp模块中source/office/目录下的config.scp以替换掉全局变量$ProductName$ProductVersion$VerdorName的值。

6是经过再品牌化的OpenOffice.org,“中国专利编辑器”的闪现介绍图片。


6中国专利电子申请编辑器”介绍图片





6中国专利电子申请编辑器”介绍图片




  1. 结论

这个将OpenOffice.org定制化为“中国专利编辑器”的项目在三个月内成功完成。国家知识产权局对按期完成和主要功能的实现表示满意。

经过对该项目的事后总结,我认为:

  • OpenOffice.org完全有能力定制化为XML著作工具,它的杰出的XSLT过滤器构架使其成为一个很好的基础平台。这个项目只是此类应用的一个实例。

    • 看起来OpenOffice.org XML文件格式的某些数据模型不足以满足需求而需要更新,例如文字处理中表格的纵向单元格合并模型。

  • 如果针对外部的、第三方的、定制化的XML DTDschema的校验过程是必要的,那么,

    • 必须引入OpenOffice.org SDK程序,用任何一种OpenOffice.org支持的语言或者它们的混合体来实现该校验。

    • 由于当前OpenOffice.org采用SAX接口的限制,几乎不可能建立编辑时实时更新的XML树结构。实际可行的方法是周期或非周期性的检查。

    • 由于当前OpenOffice.org并不支持全文档模型范围内的足够的限制,建立好的模板和检查尽可能多的素材就显得非常必要。OpenOffice.org XML文件格式属性和元素上的更多限制或者强大的控件和表单会对此很有益处。

    • 处理过程最好是先针对外部XML DTDschema进行校验,然后再进行导入、导出的XSLT转换。有时去除导入文件过程中的校验步骤是可接受的,这是基于它们都是合乎校验的假设。

    • 虽然OpenOffice.org SDKAPI已经相当强大,它还很有必要继续增强,提供更多的相关文档和例程也会有很大帮助。

  • 为了基于OpenOffice.orgXSLT过滤器构架实现优秀的XML著作工具,外部的、第三方的、定制化的XML DTDschema最好是良好定义的:完整、一致、合理。

    • 如果它关注于逻辑数据内容,最好只包含数据内容而没有任何样式的定义。如果它也要定义某些表现形式,最好单独为电子出版建立完整的XSL-FOXSLT定义。

  • 再品牌化OpenOffice.org相当容易。

团队精神是这个项目成功的重要基石。几乎所有问题都是在频繁的工程师、经理和客户的联席会议上解决的。“讨论、讨论、再讨论”是我们所有的杀手过程。由于时间表的紧迫性,我们实际在某种程度上应用了极限编程(XP)的某些措施。

  1. OpenOffice.org中的XML应用

上一篇重点介绍了OpenOffice.org的技术体系结构。它的分层架构、UNO组件模型、基于IDLAPISDK等等都是使OpenOffice.org获得广泛应用和好评的技术优势所在。

OpenOffice.org中的另一大特点是完全公开并充分记录的、可扩展和标准化的XML文件格式。该文件格式可以持久保存数据,用户不虞担心无法访问年代久远的文件,或者需要为此付出高昂的代价。基于该文件格式的架构和应用,开发者也可以轻松实现支持客户化的外部文件格式,与网络服务等其他应用集成。

    1. 需求与目标

      1. 专有办公软件的困扰

随着整个社会信息化程度的提高,办公软件已经成为社会信息基础设施的一部分。不论是个人消费者,还是企业、政府、和其它非盈利机构,都会或多或少地使用文字处理、电子表格、演示文稿、简单绘图和图像处理这样的功能,办公软件已经成为计算机使用中的日常需求。对于办公软件的团体用户来说,除了基本的办公“生产力”应用外,他们还有其他一些需求:

  • 能够支持附加处理和集成功能:比如文件的归档和索引功能,校验文件内容的合法性,支持与数据库和工作流的集成,能够批量处理文件等;

  • 文件具有长期的可读性:这对于那些需要处理历史悠久的文件的大型团体(比如政府、博物馆、大型企业等)分外重要;

  • 文件独立于应用程序,最好是独立于提供者,这样用户就不会被锁定在某个文件格式上而被迫延续使用;

  • 文件格式统一,避免非结构化的、混乱的工作流和多种文件格式混杂。

而现在用户所使用的专有办公软件无法轻易满足以上的这些要求,这是因为:

  • 专有办公软件可以提供对附加功能和集成的支持,可是这需要附加的许可证和高额费用。

  • 专有办公软件的文件通常都是不公开的,甚至是附带专利的,这样早期软件所支持的文件格式完全要期待软件厂商在后续版本中提供支持,这些支持通常是需要付费的,由于软件商的某些目标和企业行为甚至是不可得的。

  • 专有办公软件的文件通常都是依附于特定应用程序,甚至是特定版本的,这样用户就会为了保持对以前文件的访问而被锁定在某个软件上,这种代价通常是高昂的。

  • 专有办公软件的文件通常都是自成体系,经常由于利益问题导致文件交换困难,从而多种格式并存。

用户希望办公软件能够在保持功能的基础上开放文件格式,这样团体用户可以自己完成附加功能和集成工作;文件的长期可读性也可以保证,因为访问文件的应用程序可以由第三方实现;而由此文件也独立于软件商和特定应用程序,用户真正掌握了自己的数据和信息;文件格式也可以通过公开协商的方式实现统一。

      1. 客户化与可扩展性

随着办公自动化和信息化,政府、企业等团体用户在日常工作中的业务流转已经逐步过渡到需要自动完成的阶段,而办公软件通常会被团体用户用来支持工作流(Workflow1。工作流中的一个重要内容就是实现工作文件在流程中恰当地运转以完成整个业务,而这里所指的文件很可能是团体用户所在行业规范的文件,或者是用户自定义的文件。实际上,在政府公文2、法律文件3、税务记录4、专利管理5、会议论文6、科技文件7、技术规范8、电子书籍9、盲人书籍10、新闻稿件11、投资研究12、文字研究13、人力资源14、采购销售、财务报表15、医疗16、保险17、零售18、金融19等方面、甚至整个电子商务系统20,国际上有团体或者联盟已经开始、甚至是完成了这些专用文件格式规范的制定。

中国政府也在基于XML着手制定《中文办公软件文件格式规范》21和《基于XML的电子公文格式规范》22;国家知识产权局为实现专利受理自动化而制定的《以电子文件形式提出的专利申请请求类文件类型定义[DTD](试行)》23已经于2004年公布,并开始接受专利电子申请;中国证监会参考XBRL12制定的《上市公司信息披露电子化规范》在2004年通过审批,上海证交所已经推出了相关的服务;税务部门在某些税种内已经开始施行了基于XML的数据表示方式。

这些为特定目的定义的文件规范要求和定制好的结构化工作流紧密配合。对于专有办公软件来说,支持这些文件规范意味着要在保持传统办公软件使用模式的基础上,根据需要提供扩展功能。也就是要即能保证对市场中广泛使用的文件的兼容性,又要提供附加工具支持对文件语义的操作,在通用格式和专用格式间转换。要支持这样的扩展功能,在没有充分了解专有办公软件内封闭的文件格式的条件下是很难实现的。

      1. 保护投资与标准化

团体用户通常在采用某种文件格式存储数据和信息后都希望能够保存尽可能长的时间,并且保证文件格式的稳定、或者是受控地演化,这样用户才能保持为此及相关系统的投资收益率并尽可能地降低总持有成本。而封闭的文件格式常常会导致丢失信息,或者是成本居高不下。

这个问题根本的解决之道在于文件格式的开放和标准化。只有文件格式开放了,才能够实现充分竞争,由此降低成本;只有标准化了,文件才能够稳定地演化,数据和信息才能更通畅地流转,也能够被更广泛地支持,出现更多的工具,用户才会有更多的选择。这是一个用户和业界双赢的途径。

      1. 解决方案

为了满足如上用户的需求,OpenOffice.org采用了可扩展标记语言(eXtensible Markup LanguageXML)作为本地文件格式规范24的基础。采用XML作为办公软件的文件格式,能够轻松实现各种集成和扩展处理。通过定义办公软件特定的标记,这种文件格式能够支持所有的办公软件的功能,易于生成和处理文件,而且不会被某个软件商或应用程序锁定。为了实现文件格式的标准化,OpenOffice.org还参与发起了OASIS开放办公XML格式技术委员会25,目标就是制定开放办公软件XML文件格式规范。

    1. 设计原理

      1. 内容与样式

办公软件文件格式同行业专用文件和页描述文件格式有显著的区别。

绝大多数的行业专用文件只定义了文件中具有特定逻辑的内容,文件的显示样式在外部独立地实现,内容是它们的关注点。而页描述文件(例如Adobe PostScriptPDF和其他小样格式)通常是在特定页中定义了内容的显示方式,对于内容中的逻辑是不作规定的。

办公软件文件的内容通常具有一定的逻辑关系,例如章节和标题层次,而且也需要确定它的显示样式,例如字体字号和缩进等。那么就有两种实现方式:一种是将样式和内容混合起来表示,样式就嵌入在内容流里;另一种是将样式与内容分离开来表示,通过某种映射联系起来。前者的优点在于格式简单,缺点是嵌入在内容中的样式很难管理,而且由于重复样式会产生很多的冗余信息。后者正好与前者相反,格式相对复杂但层次较为清晰,样式单独保存有利于提高数据表达信息的效率,并且方便对样式和内容分别进行处理。

OpenOffice.orgXML文件格式采用的就是后一种实现方式。

      1. 文件打包

采用了样式与内容分别处理的OpenOffice.org XML文件格式,需要处理的一个问题是:如何处理文件内的非文字内容(例如图像、OLE对象和打印机设置信息),如何管理这么多数据部分?

OpenOffice.org针对多部分的文件采用了压缩打包26的方式。也就是说,将样式、内容、设置信息、元数据、和图像等非文字内容等采用通用压缩算法打包,访问时针对特定的部分进行解包和再打包。这样做的好处是统一管理,单独处理,文件尺寸更小,而且压缩算法和打包的ZIP文件格式也是各平台上都可得的,无专利隐患,并有开源软件的支持。

对于某些需要嵌入在文字内容流中的非文字对象,OpenOffice.org XML文件格式采用Base64的编码方式将其嵌入的。

      1. 标准化

OpenOffice.org XML文件格式从设计之初就非常注重标准化。为了能够更好地同其他信息格式交互,OpenOffice.org XML充分利用了现有的行业标准,不是“重新发明轮子”,而是在这些标准的基础上组建自己的办公软件文件格式。比如它直接采用了MathML27XLinkDublin Core28,重复利用了XHTMLSVG29XSL-FO30CSS中的内容,在此基础上融合创新而成OpenOffice.org XML文件格式。

OpenOffice.org的实现架构中实际上还充分支持了XSLT31,下一版的OpenOffice.org 2.0还会支持刚发布不久的XForms32

      1. 卓越的XML

OpenOffice.org XML文件格式,不仅仅是把现存的数据结构简单地XML化,也不是进行某种“拥抱-扩展-消灭”(Embrace-Extend-ExtinguishEEE33的实践。

OpenOffice.org XML文件格式完全遵从于XML及其命名空间规范,所有的信息都通过结构化的XML来保存。没有信息存在于文件的物理表示方式中,没有信息存在于注释中,也没有信息存在于特别的节点名或者值中,更没有在值的“子格式”中保存信息。

为了统一文件格式,OpenOffice.org中所有相同功能的模块都采用同一概念和表示方式。这样在应用中就有很多的通用格式模型可以重复使用,提高了数据表示信息的效率。

    1. 文件格式

      1. 结构框架

如上所述,OpenOffice.org XML文件格式中引用了很多外部标准,比如XML 1.0SVG 1.0XML NamespaceXSLT 1.0XPath 1.0XLink 1.0XSL-FO 1.0HTML 4.01ISO 860134ISO 63935ISO 316636等。而OpenOffice.org XML文件格式为了表示不同性质的内容,又为不同性质的数据内容定义了15个命名空间以便于区别管理。比如表示公共信息的xmlns:office、表示样式信息的xmlns:style、表示脚本的xmlns:script、表示文本的xmlns:text、表示元数据的xmlns:meta等。由于OpenOffice.org XML文件格式公布时W3C XML Schema还没有制定出来,所以它采用了传统的DTD进行数据类型定义。

1 OpenOffice.org XML文件根结点

1 OpenOffice.org XML文件根结点


1OpenOffice.org的文件基本结构。办公文件根结点<office:document>下包含的元素是:元数据<office:meta>、全局设置<office:setting>、脚本<office:script>、字体声明<office:font-decls>、普通样式<office:styles>、自动样式<office:automatic-styles>、主样式<office:master-styles>、内容体<office:body>

      1. 打包格式

子文件名

根元素

子文件内容

meta.xml

<office:document-meta>

文件元信息(例如作者和创建时间):<office:meta>

styles.xml

<office:document-styles>

文件中使用的样式:<office:font-decls><office:styles><office:automatic-styles><office:master-styles>

content.xml

<office:document-content>

文件内容及其使用的自动样式:<office:script><office:font-decls><office:automatic-styles><office:body>

settings.xml

<office:document-settings>

全局设置(例如窗口大小和打印机设置):<office:setting>

1 OpenOffice.org XML文件压缩包结构

实际上在OpenOffice.org的文件压缩包内,以上这几个部分被分别存储在相关的几个子文件内,如表1中所示。

OpenOffice.org XML文件的两个基本属性是类型和版本。文件类型通过<office:document><office:document-content>根结点的属性@office:class表示,可能的类型包括文字、主控文档、电子表格、绘图、演示文稿、图表等。

其中的“主控文档”是一类特殊的文字文件。主控文档由若干子文件构成,每个子文件实际上都是完整且独立的文件,链接到主控文档的“区域”中来。在主控文档中可以为这些区域定义主控样式,这些样式会在主控文档中应用到子文件上去。主控文档特别适合多人著述时使用。不同的作者撰写不同的章节,只要在主控文档中应用同样的样式,所有的内容就都被统一排版了。这样OpenOffice.org就能够在著作层次上实现内容和样式的分离管理。

OpenOffice.org XML文件中的校验和向前兼容性处理由文件根结点的属性@office:version控制。这个属性保存文件的当前版本,这样不同版本的OpenOffice.org访问文件时,会调用不同版本的文档模型。利用XML优秀的可扩展性,OpenOffice.org的不同版本能够方便地访问其他版本生成的文件,并最大程度上地保证兼容性。

压缩包内各个文件的相关信息由一个专门的列单文件(META-INF/manifest.xml)存储。它的主要内容包括:包内所有文件的列表、每个文件的媒体类型、包内被加密的文件所需要的解密信息。

      1. 样式

OpenOffice.org XML文件格式采用的是样式与内容分离管理的方式。而样式实际上分为三大类:

  • 普通样式:OpenOffice.org用户界面上可以看到的表示格式的样式,有时为了与其他样式区分称为普通样式。普通样式就是对OpenOffice.org XML文件格式不了解的用户眼中的样式。

  • 自动样式:用户直接给对象(例如段落)设置的排版属性包含于自动样式。自动样式由OpenOffice.org在文件输出时自动生成。自动样式只包含设定于特定对象的排版属性。

  • 主样式:包含应用于文件内容并一起显示的排版信息和附加内容的样式。比如OpenOfficr.org Draw主页中的图像背景,又如OpenOffice.org Writer主页中的页眉和页脚。主样式又分为普通主样式和自动主样式。

OpenOffice.org XML文件中的样式间支持继承关系,但被继承者只能是普通样式。在普通样式和自动样式中还根据包含的内容不同划分为不同的家族,例如段落、区域、文字、表格、图表、图形等,继承也只能在同家族的样式间进行。

OpenOffice.org XML文件格式中的样式也支持条件映射,也就是说可以在满足特定逻辑判断条件下映射为另一样式。这些条件映射还可以进行组合。

OpenOffice.org XML文件格式中的页样式(最常见的主样式),实际上由两部分组成:页主样式<style:page-master>和主页样式<style:master-page>。页主样式隶属于自动样式,主要描述页的物理和几何属性,例如页大小、页边距、页眉和页脚高度等。而主页样式是文件中的页模板,位于主样式<office:master-styles>结点内。它包含一个指向页主样式的引用,以及页上显示的静态信息,例如静态的页眉页脚和背景等。

OpenOffice.org XML文件格式中也为数据定义了丰富的样式,时间、日期、货币、数值、科学计数、百分数、分数等数据格式类型定义到了最小元素,完全不存在表达特定含义的编码子元素与字符串。在表示语言的ISO-639标准和表示国家地区的ISO-3166标准的基础上,支持近百种locale组合的数据表示方法。

      1. 文字处理

OpenOffice.org XML文件格式中的文字内容主要由段落、标题、列表、表格、目录、索引、参考书目等构成,其中最基本的元素是段落。

段落用<text:p>表示,章节标题<text:h>可以看作是被标记为标题的特殊段落,它的特性大抵与段落相同。段落又由行内文本元素(Inline Text Element)构成。行内文本元素指的是文字区跨<text:span>和文本、脚注、尾注、书签、引用、链接锚、域和其他文字标记等,而文字区跨<text:span>所包含的也是行内文本元素。所以,从文件格式上讲文字区跨<text:span>是可以嵌套的,但是实际上OpenOffice.org输出的XML文件并不包含嵌套的文字区跨,因为这样的结构会更加复杂。段落内文字间的软回车<text:line-break>、空格符<text:s>和横向制表符<text:tab-stop>都是用元素来表示的,所以直接嵌在文本中的排版控制符号是不被OpenOffice.org识别的。

OpenOffice.org XML文件格式中的列表分为无序列表<text:unordered-list>和有序列表<text:ordered-list>两种。无序列表指的是由标记符号或图片引导的列表,而有序列表通常由各种数字或其本地语言文字表示引导。列表由若干列表头<text:list-header>和列表项<text:list-item>组成,而列表项又可包含段落、章节标题、无序或有序列表。被任意列表项包含的无序或有序列表实际上就是该列表项所在列表的子列表,或者说次级列表。OpenOffice.org就是这样通过列表嵌套来实现多级列表的。

      1. 电子表格

表格<table:table>主要由表列组<table:table-columns>、表头行组<table:table-header-rows>和表行组<table:table-rows>构成,其中各组又分别包含单个表列、表头行和表行。表头行<table:table-header-row>表示在每页重复的表头,而表行<table:table-row>表示普通的表格内容。表头行和表行都由表单元格<table:table-cell><table:covered-table-cell>组成,后者表示表单元格合并后被覆盖的单元格。表单元格可以包含子表、段落/章节标题、列表和其他图形对象。表格的内容主要由表行包含的表单元格控制。

OpenOffice.org XML文件格式中的WriterCalc应用都包含表格,所以它们采用了统一的定义。但是它们之中的表格在实施上还是有一些区别的:

  • Calc中的表行和表列具有相对丰富的特性,比如隐藏、合并等功能,而在Writer中则没有;

  • Calc中没有表头行的概念,表列与表行在概念上是平等的,表单元格只是依附于表行表示;而Writer中有可重复出现的表头行,表行是主要内容结点,表列是次要结点,只有横表头行而没有纵表头列,所以只支持纵向表;

  • Calc中的表单元格是表格的原子单位,不能拆分、只能合并;而Writer中的表单元格既能拆分又能合并,但是纵向合并表示为子表<table:sub-table>,由于以表行为主要内容结点,所以纵向合并实际上存在某些限制;

  • Calc中有表源<table:table-source>和表方案<table:table-scenario>的概念,还有命名区域、条件格式、公式计算、筛选、排序、合并计算、汇总、大纲等数据处理功能,以及丰富的数据样式;而Writer中的表格功能就非常有限。

因为OpenOffice.org Calc是专用的表格化数据处理应用,而OpenOffice.org Writer中的表格只是实现了部分简单的表格功能,所以两者在OpenOffice.org XML文件格式中的表格部分具有比较明显的区别,Writer中的表格相对简单,但是具有一些文字处理方面的特性。

      1. 图形

OpenOffice.org中的图形应用是指绘图(Draw)和演示文稿(Impress),而实际上无论功能还是XML文件格式,绘图都是演示文稿的子集。演示文稿应用中具有一些绘图没有的功能,比如放映设置等。图形内容也可以插入到WriterCalc中。

OpenOffice.org XML文件格式中的图形应用也具有主样式,通过主页样式、页主样式和传单主样式<style:handout-master>来确定。而图形内容主要通过内容体下的绘图页<draw:page>来表示。绘图页中可以包含众多的绘图元素,例如矩形、直线、折线、多边形、路径、圆、椭圆、连接线、标注、页缩略图、图元组等等。绘图页还可包含命名空间xml:dr3d下的3维图形容器元素:3-D场景<dr3d:scene>3-D场景可以容纳的元素包括:光线、立方体、球体、多边形拉伸体、多边形旋转体等。

OpenOffice.org Impress特有的设置是通过其他一些元素来定义的。比如内容体中表示演示设置的<presentation:settings>、绘图页中表示演示笔记的<presentation:notes>和表示演示动画的<presentation:animations>等。

OpenOffice.org的其他应用,比如文字处理和电子表格中同样可以包含绘图内容。在这些应用中不需要绘图页这样的专用绘图容器元素,各种绘图元素可以直接放置于段落、文字区跨、表单元格、甚至内容体之内。

      1. 窗体与控件

OpenOffice.org XML文件格式支持窗体(form)与控件(control),窗体是指包含与用户交互的控件的容器,所有的控件必须要处于某个窗体内部。

窗体集<office:forms>位于内容体之内,并可包含若干窗体<form:form>。每个窗体可包含窗体属性<form:properties>、关联事件<office:events>、若干控件<form:control>、甚至嵌套窗体。控件的种类也很多,包括文字、文字区域、固定文字、文件选择、密码、格式化文字、按钮、图片、检验盒、列表盒、单选盒、组合盒、控件框、图片框、隐藏控件、数据表格、和泛控件等。

控件是数据可感知的,若干控件组合起来可以方便地表示数据源中的数据。控件还可以和各种事件关联起来,通过宏或者其他方式实现数据的自动处理。

OpenOffice.org XML文件格式中的窗体和控件未来会迁移到W3C XForms标准上来。

      1. 图表内容

OpenOffice.org XML文件格式中的图表<chart:chart>总是位于内容体之下。图表支持线条、平面、圆、环、散列、放射、柱、条等类型及其3-D形式,还支持add-in的外部绘图方式。

图表包含若干元素,标题<chart:title>、子标题<chart:subtitle>、图例<chart:legend>、绘图区域<chart:plot-area>等。如果数据源和图表在相同文件内,则通常用绘图区域的属性@table:cell-range-address来表示;如果数据源和图表不在同一文件内,则用绘图区域内的元素<table:table>来表示数据源。绘图区域包含的其他元素有2-D/3-D图表的墙体<chart:wall>3-D图表的地板<chart:floor>、坐标轴<chart:axis>、数据序列<chart:series>、数据类别标识<chart:categories>3-D光线<dr3d:light>等。

      1. 索引

OpenOffice.org XML文件格式中支持多种索引,并且可以通过模板来修改这些索引的表现形式。

这些索引内容都位于内容体内,包括:内容目录<text:table-of-content>、插图索引<text:illustration-index>、表格索引<text:table-index>、对象索引<text:object-index>、字母顺序索引<text:alphabetical-index>、参考文献目录<text:bibliography>、以及用户自定义索引<text:user-index>等。

      1. 用户界面与对话框

OpenOffice.org XML文件格式规范中也定义了用户界面和对话框的XML表示,它们是基于可扩展用户界面语言(Extensible User Interface LanguageXUL)制定而成的。

OpenOffice.org的用户界面定义实际上是保存在文件内部,或者是位于全局用户配置包内的。每个OpenOffice.org组件都有其特有的菜单条<menu:menubar>、加速键列表<accel:acceleratorlist>、状态条<statusbar:statusbar>、工具条<toolbar:toolbar>的配置,它们都可以保存在全局配置包的子文件内。用户界面配置还包括与操作相关的事件<event:event>响应设置,以及为了标识工具条按钮和菜单项的图片。这里所有的内部图片<image:entry>和外部图片<image:externalentry>都必须保存在图片容器<image:imagecontaineer>内。

OpenOffice.org XML中的对话框同样也是基于XUL制定的。对话框<dlg:window>包含样式<dlg:style>、作为控件容器的公告板<dlg:bulletinboard>、以及与其关联的事件<script:event><script:listener-event>。公告板容器<dlg:bulletinboard>可以包含的控件种类也非常多,例如按钮、检查盒、单选组、组合盒、菜单列表、标题盒、文字域、文字、文件控件、图片、日期域、时间域、数字域、货币域、模式域、格式域、进度条、滚动条、固定线等等。对话框中的控件与文件内容中的控件是属于不同的XML命名空间的。

      1. 文件安全性

OpenOffice.org XML文件格式规范也包括对文件安全性的考虑,现在主要体现在文件加密方面。加密是以密码保护方式实施的,具体步骤如下:

  • 由用户键入的密码创建20字节长的SHA137摘要,并传递给打包组件;

  • 打包组件根据当时的机器时间启动随机数发生器,为每个子文件产生一个随机的8字节初始向量和16字节的“盐”;

  • 这个“盐”与用户密码的20字节长的SHA1摘要一起为每个文件产生128位的密钥,产生这个密钥的算法是迭代次数为1024PBKDF238算法;

  • 这个产生的密钥和初始向量一起用在密码反馈(Cipher FeedbackCFB)模式下的Blowfish39算法中给文件加密。

OpenOffice.org. XML文件格式规范并不满足于这已经很强大的128位密钥保护。在OpenOffice.org的下一版本中,会对W3C XML 签名40和加密41规范提供支持42。如此以来,不但可以对整个文件进行多次签名和加密,还可以对文件中的若干片断进行复合签名和加密;不但可以在OpenOffice.org及其衍生软件内保证文件的安全性,而且还可以在其外保证安全性。

OpenOffice.org XML文件格式的内容实际上非常丰富,这里只是比较概略的介绍。详细内容读者可以参阅《OpenOffice.org XML文件格式1.0技术参考手册》43,和OpenOffice.org XML文件格式DTD44

    1. 基于XML的文件过滤器45

      1. XML组件

OpenOffice.org XML文件的输入、输出是通过与XML相关的组件来实现的。如图2所示,从结构上看OpenOffice.org运行时程序内部依然是二进制文档模型,这有利于提高效率。当文件从磁盘或其他文件系统读入时,基于XML的过滤器会将其转换成OpenOffice.org XML格式的数据流,再由实现ImportFilter服务的组件通过SAX方式导入内部的文档模型。其中基于XML的过滤器和实现ImportFilter服务的组件一起封装成文件输入过滤器,基于XML的过滤器通过调用XDocumentHandler方法来生成XML数据流。


2 OpenOffice.org 基于XML的文件输入过滤器


2 OpenOffice.org 基于XML的文件输入过滤器




如图3所示,文件输出过程与输入过程基本上相反。实现XML ExportFilter服务的组件将OpenOffice.org XML的数据流传递给基于XML的过滤器,该过滤器处理XML SAX事件,并将数据以合适的格式存储为磁盘或其他文件系统上的文件。实现XML ExportFilter服务的组件和基于XML的过滤器一起封装成文件输出过滤器。


3 OpenOffice.org 基于XML的文件输出过滤器


3 OpenOffice.org 基于XML的文件输出过滤器




类似的,如果可以把基于XML的输入过滤器与输出过滤器“串联”起来,实际上就能够实现脱离OpenOffice.org二进制文档模型而独立运行的文件转换工具。图4中就演示了这样的一个从其他格式文件转换到OpenOffice.org XML文件的工具。与图2相比,区别就在于原先实现XML ImportFilter服务的模块现在是XML Writer组件。如此以来,仅仅实现一个基于XML的输入过滤器我们就能够实现一个独立的文件转换工具了。


4 OpenOffice.org XML文件独立转换工具


4 OpenOffice.org XML文件独立转换工具




实际上现在OpenOffice.org社区里已经出现了许多与其他文件格式相互转换的独立工具,例如WriterLaTex的转换46WordPerfectWriter间的转换47OpenOffice.orgOpenSHORE48文件之间的转换等。

OpenOffice.org还有一个XMerge49过滤器项目,这是为了实现与PalmPocketPCNokian等手持设备上的嵌入式办公软件(比如Palm中的AportisDocMiniCalcPocket Pc中的Pocket WordPocket Excel)进行通讯和同步的工具。XMerge采用Java实现,能够导入并将手持设备上相对简单的文件合并进OpenOffice.org XML文件中来,这对于提高移动用户的工作效率是很有帮助的。

      1. 基于XSLT的文件过滤器

XMerge项目具有优秀的可扩展性,它能够利用Java来提供对基于XSLT的文件过滤器50的支持,这就为OpenOffice.org支持第三方和客户化的XML文件格式提供了广阔的空间。


5 OpenOffice.org XML文件流处理


5 OpenOffice.org XML文件流处理




5是将图2中的OpenOffice.org基于XML的文件输入过滤器进一步分解的流处理过程。该输入过滤器被进一步分解成XML解析器和XSLT处理器两部分。存储于磁盘或其他文件系统上的客户化XML文件,经过实现XDocumentHandler接口的XML解析器解析后,进入XML逻辑转换单元。在此,客户化XML数据流被XSLT处理器转换为OpenOffice.org XML数据流。该XSLT处理器由于也实现了XDocumentHandler接口,所以可以被实现了XML ImportFilter服务的组件通过SAX方式导入OpenOffice.org内部文档模型。基于XSLT的文件输出过滤器的流程与输入基本相反。

在这个文件流处理过程中,基本上只要实现客户化XML文件与OpenOffice.org XML文件间的转换逻辑,也就是XSLT脚本,并设定与文件和过滤器类型相关的配置信息就能增加一种客户化XML文件的支持。

OpenOffice.org软件内已经加入了好几种这样基于XSLT的文件过滤器,比如支持DocBookXHTMLMicrosoft Word/Excel 2003 XML格式的过滤器。OpenOffice.org社区内也出现了一些对独立XML文件格式的支持,例如HTML/WML51TEI 12XML文件。而实际上在团体用户的工作流中,很多已经制定好的或者正在制定的行业XML文件格式规范都可以通过这种方式使OpenOffice.org提供对它们的支持。比如XBRLUBLOpen eBookNewsMLRIXML、中文办公软件文件(UOF)、中国专利电子申请文件(SIPO XML)等等,OpenOffice.org都可以作为它们的优秀的著作工具。对行业XML文件格式规范的支持能力,再辅以功能强大的SDK,可以说OpenOffice.org在这些行业的工作流和内容管理系统环境中具有广阔的应用前景。现在已经有了一些这方面的解决方案和成功案例

    1. OASIS Open Office

结构化信息标准促进组织(OASIS)是从早期的SGML Open组织发展而来,它是为了推动开发、统一和采用电子商务标准而建立的全球性非盈利联盟。OASIS的技术委员会主要针对的领域包括网络服务、电子出版、水平电子商务架构、安全、公共领域、垂直工业应用等等。为了促进产业共识并联合各方努力,OASIS为技术委员会特别设计了简单、开放的流程。

OASIS开放办公XML格式技术委员会52成立于200211月,目标就是为了建立一个开放的、基于XML的办公软件文件格式规范,该规范以OpenOffice.org XML文件格式规范为基础着手制定。现在这个技术委员会的成员包括办公软件提供者SunIBMCorelKOffice53,企业出版和内容管理提供商Arbortext54SpeedLegal55Stellent56Blast Radius57等,IT咨询公司CSW集团58Propylon59ISOGEN60Toolsmiths61等,以及波音公司和澳大利亚国家档案馆62等企业和用户组织。在经过了一年多的讨论之后,OASIS Open Office XML格式1.0的委员会草案采用RELAX-NG63W3C XML Schema20043月公布,面向全世界征集意见。这个草案虽然从总体结构上与OpenOffice.org XML文件格式差别不大,但是也进行了一些更改和提高。为了保持规范的独立性,它还采用了全新的XML命名空间定义。

OASIS开放办公XML格式技术委员会从成立之初就受到了世界各地的广泛关注和称赞,不断地获得了更多的支持。KOffice组织于20038月宣布会将本地文件格式迁移到OASIS Open Office XML文件格式上来,并于该技术委员会草案公布后的第二个月就提供了对该文件格式的初步支持。未来发布的OpenOffice.org 2.0也将会将OASIS格式做为本地文件格式。GNOME Office暂时还没有参加这个技术委员会,但是他们表示会根据用户的需要来提供对该文件格式的支持。与此同时,有用户通过公开信64的形式呼吁Corel也将OASIS Open Office XML格式作为WordPerfect的本地文件格式。



通过本文,相信读者可以对OpenOffice.org XML文件格式规范本身,及其由来、现状和未来的发展方向有了一个初步的了解。OpenOffice.org XML是迄今为止功能最完善、开放性、标准化程度最高的可扩展的办公软件文件格式,并且还将继续向开放、可扩展和标准化的方向前进。了解了OpenOffice.org技术架构和XML文件格式规范,就具有了一定的进行OpenOffice.org开发和应用的技术基础。

然而对于开放源码社区内的OpenOffice.org来讲,拥有技术基础只是必要条件。为了能够更通畅地同开源社区的成员交流,更快捷方便地获取最准确的技术资料,能够为OpenOffice.org开源社区做出更大的贡献,同时也为开发者自身的技术工作创造更广阔的舞台,了解OpenOffice.org开源社区的组织结构、行为规范、和文化风格,及其与其他若干开源社区的联系与协作方式,也是很有必要的。

总之,优秀的软件只能从优秀的软件开发实践中来,优秀的软件开发者也只能从不断的软件开发实践过程中锻炼而不断提高。希望国内的软件开发者能够积极主动地参与国际开放源码社区的建设,提高自己,贡献社会。

  1. OpenOffice.org技术架构

上一篇简单介绍了OpenOffice.org的发展轨迹、许可证问题、应用范围等情况。实际上,OpenOffice.org之所以获得如此广泛的应用,是与它本身优秀的技术架构,开放、可扩展、标准化的XML文件格式规范,以及社区成员的广泛参与密不可分的。

本篇将主要介绍OpenOffice.org的技术体系结构,它的分层架构、UNO组件模型、基于IDLAPISDK,以及UNO与其它组件模型的互操作。

    1. 分层架构

OpenOffice.org所基于的技术架构能够提供在UNIX和类UNIX系统上丰富的办公软件功能,并且这种架构能够被移植到其他很多的平台上。这是因为整个架构就是在平台无关性的思路下实现的。

整个OpenOffice.org中实际上只有不到10%的代码是与平台相关的,这些代码为上层的组件模块提供一个系统抽象层。由于C++编译器存在于每一个主要平台上,所以OpenOffice.org采用了C++作为主要的编程语言(最底层的部分代码由于效率等原因是C语言编写的)。这种实现方式允许OpenOffice.org移植到非常广泛的不同的平台上,采用面向对象语言也使得OpenOffice.org具有面向对象的技术架构。

1OpenOffice.org的分层架构图,总体上分为四层,每层由若干不同的子层/库组成,在图中用小方框表示。每层和每个子层/库都完成不同的功能。需要注意的是每个子层/库很可能不是对应于具体的某个源代码模块,而是相关的若干个模块。因为OpenOffice.org的源码模块众多,刚发布的时候还不到100个代码模块,而最近发布的OpenOffice.org 1.1.2已经到了150左右。模块之间的相互依赖关系可能是很复杂的,而且随着版本发布的更新不断有变化。所以从总体上把握OpenOffice.org分层模型的功能结构和依赖关系对于掌握整个OpenOffice.org的技术架构是很有帮助,也是至关重要的。

框1

1OpenOffice.org 1.1.2源代码模块的功能描述表。在约150个模块当中,有将近30个模块是从其它开放源码社区获得的源代码。这些模块依照字母顺序排列,它们的功能描述尽管比较粗略,也会对理解整个OpenOffice.org的体系结构很有帮助。需要注意的是不同版本的OpenOffice.org包含的模块数目可能有不同,或有增删,而且有些模块也正在变更当中。

大致上讲,

  • 系统抽象层(System Abstraction Layer)封装了所有系统相关的API并提供了共同的面向对象的API以平台无关的方式访问系统资源;

  • 基础设施层(Infrastructure Layer)构建应用程序同平台无关的环境,为了向上提供组件和服务,这一层完整地包含了面向对象平台所需面向对象API的很多方面,包括组件模型、脚本解释、复合对象等等;

  • 构架层(Framework Layer)为在不同应用间能够实现复用,提供每个应用和所有共享功能(例如公共对话框、文件访问或者配置管理等)所需的架构和环境;

  • 应用层(Application Layer)提供所有的OpenOffice.org应用,这些应用的交互方式是基于若干底层的。

2OpenOffice.org 1.1.2源代码模块依赖关系树状图。这张图所描述的是OpenOffice.org中各个模块的编译依赖关系,实际的模块编译顺序也是根据这个依赖关系产生的。从图中我们大致可以看出OpenOffice.org的分层结构。最底部比较密集的区域是系统抽象层,在此之上非常密集的区域内的模块组成基础设施层,上部比较稀疏的区域是构架层,最顶部的若干模块组成应用层。

下面逐层描述它们的功能。

      1. 系统抽象层

分层的系统架构是OpenOffice.org能够轻松移植到广泛而不同的系统平台上的重要因素之一。为此目的,OpenOffice.org架构中特别定义了一个称作“系统抽象层”的虚拟层。所有平台相关的实现都在这一层下发生,或者作为可选模块存在。所以理想状况下只要实现了系统抽象层提供的功能再把上面诸层所属的模块重新编译,OpenOffice.org就能够在新的平台上运行了。但如果想要实现所有功能,可选的平台相关模块也要进行移植。为了减少移植工作量,系统抽象层所提供的功能被缩减到每个平台上可用的最小集合。当然在某些平台上系统抽象层必须模拟某些不存在的功能,比如在没有本地多线程的环境下支持“用户境”线程。1

系统抽象层包括如下四个子层/库:

  • 操作系统层(Operating System LayerOSL)封装了用来访问和使用系统资源(例如文件、内存、套接字、管道等)的操作系统功能。OSL是具有面向对象API的很薄的一层,和上层不同的是这里的面向对象APIC语言实现的APIC语言API的优势在于允许将该层用不同的实现语言移植到不同的平台上去,比如对于嵌入式系统或者互联网应用设备来说,汇编语言就可以用来实现这一层。

  • 运行时库(Runtime LibraryRTL)提供所有的准平台无关的功能。这里提供字符串类的实现,也能够把字符串转换到不同的字符集,内存管理的功能也是在这里实现的。

  • 标准模板库(Standard Template LibrarySTL2在这里作为泛型容器类来使用。STL提供了列表、队列、栈、映射等模板/类的实现。

  • 可视类库(Visual Class LibraryVCL3OpenOffice.org的核心库之一。VCL的实现分为两个部分,一部分封装了对不同的底层GUI系统的所有访问方式,另一部分是完全平台无关的,包括面向对象的2-D图形APIOpenOffice.org使用的整个窗口部件集。这种纵向划分的方法保证了所有的窗口部件具有独立于不同平台上所用GUI系统的相同的行为方式,并且在所有平台上的外观感受和功能都是相同的。对打印功能的访问、剪贴板和拖放功能都是在VCL内实现的。

      1. 基础设施层

  • 虚拟操作系统层(Virtual Operating System LayerVOS)为了更方便地使用文件、线程、套接字等系统资源,把操作系统层(OSL)的所有功能封装成了C++类。这些C++类提供了一个以面向对象方式访问所有系统资源的便捷途径。

  • 工具库(Tools Libraries4由提供辅助功能的很多小库组成,包括处理日期时间相关数据的公共实现,也包括结构化存储方式的实现,另外还包括通用注册表、类型安全管理、以及持久属性数据的实现。

  • 通用网络对象(Universal Network ObjectsUNO5OpenOffice.org所使用的组件技术。这种组件技术不依赖于任何图形子系统,而是很大程度上基于多线程和网络通讯的环境所提供的功能。
    UNO
    中的IDL编译器能够根据特定的接口定义产生二进制表示形式和相关的C头文件或者Java文件。这个二进制表示形式是平台和语言无关的,并在运行时编组远程函数调用的参数、或者为特定语言访问接口所提供的实现产生即时代码。这种技术的优点是减少了同时为不同语言绑定所产生的代码量,缺点是不仅对每种语言绑定所产生的代码都需要特定的后端支持,而且对每种编译器都需要一个运行时的桥接模块。
    很多UNO的部件都是作为UNO组件实现的,这有助于创建非常灵活的系统以及运行时的系统扩展。以提供新的桥接/通讯协议为例,UNO提供了本地和在网络上的访问组件的透明方式,其中在网络上的通讯是通过IIOP实现的。如果组件是做为共享库实现的,那么该组件就可以被UNO加载入程序的进程内存中。从而对组件的每一个访问都好像是函数调用一样,不需要任何远程函数调用所需的参数编组。

  • 通用内容代理(Universal Content BrokerUCB6允许所有的高层代码透明地访问不同类型的结构内容。UCB由一个核心和若干通用内容提供者(Universal Content ProviderUCP)组成,后者用来集成不同的访问协议。现有OpenOfficr.org UCP实现了对HTTPFTPWebDAV和本地文件系统上内容的访问。

  • 复合对象(Compound Objects)提供了复合文档(比如电子表格被镶嵌进文字处理文件中)的功能。现在的OpenOffice.org支持复合文档和镶嵌多媒体播放器这样的可视控件,并且这个实现是平台无关的。复合文档的所有内容都以同OLE结构存储格式兼容的方式保存,这样以来,只要支持OpenOffice.org的平台就可以访问OLE复合文档。复合对象在Windows平台上的实现可以和OLE服务交互,所以可以和所有支持OLE的应用程序更紧密地结合。

  • 脚本与Basic库(Scripting and Basic Libraries7提供一个解释器,用以解释源代码并产生元指令。这些指令可以通过附带的元指令处理器直接执行,或者在模块/库里持久保存已备后用。UNO实现的所有上层应用组件所提供的功能都可以通过组件的脚本接口访问到,这就保证了采用OpenOffice.org UNO技术的新组件不需很大的成本就可以被完全脚本化。脚本接口也实现为组件,这就允许其他脚本语言轻松地集成进来。在OpenOffice.org 2.0中会集成BeanShell8(一种轻量级的Java解释器)和JavaScript。实际上随OpenOffice.org所附带的Basic是一个Basic方言。

      1. 构架层

  • 应用架构库(Application Framework LibrarySFX9为所有的应用提供环境,每个应用所共享的而没有被其他层提供的功能都在这里实现。就程序结构来讲,每个应用都要实现一个壳(shell)和若干视图(view),SFX提供了所有的基础功能,所以应用只需补充特有的功能即可。
    这个架构库对于内容检测和集成来说也是结构合理的,模板管理和配置管理就在这里提供。SFX也和复合文档的一些方面相关,比如菜单和工具条的合并和设置。对所有应用的定制化功能也是由SFX提供的。

  • 共享功能库(SVX Library10为所有应用提供架构无关的共享功能。SVX的一部分实现了一个被若干应用用来做图形编辑和输出的完整的面向对象“画布”,这个“画布”还包含一个完整的3-D 引擎。另一部分实现了字体选择、颜色选择等公共对话框11,而数据库连接12也是完全在这里实现的。

      1. 应用层

所有的应用:文字处理应用13、电子表格应用14、演示文稿应用、图表应用等等,都是在这一层实现的。而这些实现实际上都是共享库,在运行时由应用架构进行加载。架构提供了所有这些应用的环境以及它们交互的功能。

    1. UNO组件模型

现在开放系统世界里并没有每个人都接受的组件技术。桌面领域有KDEGNOME,他们都把CORBA作为底层通讯方式的基础,但是高层的组件模型彼此完全不同。所以现在不可能写出在两种桌面环境都可用的组件。而且现在的CORBA规范中并没有包括组合文档和其他桌面软件相关的功能。

另一个问题是现大多数CORBA的设计实现都是用来通过远程服务运行分布式网络应用的。所以在桌面组件模型中采用这样支持完全网络通讯负荷的CORBA实现在大多数情况下都是错误的选择。Mozilla开源项目开始的时候就根据需要建立了一个可以轻松移植到不同平台上的轻量级组件模型,这就是XPCOM

OpenOffice.org之所以采用自己的组件模型正是基于以上这些原因,以及为了提供一套与Microsoft Office相似的办公套件功能。OpenOffice.org套件提供的UNO组件技术满足了现代桌面应用对组件的所有需求。UNO也是在对象技术层面上形成的,该组件技术是OpenOffice.org API建立的基础。

UNO技术包含如下的特点:

  • 开放:UNO支持所有流行的组件标准通讯协议,例如CORBAJavaBeansOLEWindows Scripting HostVisual BasicDelphi等)、JavaScriptPython15Perl16等脚本语言,以及C++C语言的本地集成。其中CC++JavaPython都已经实现了完整的UNO绑定,而OpenOffice.org BasicOLE和共同语言架构(Common Language InfrastructureCLI)现在只支持访问UNO组件,还不能用来创建新的组件。

  • 面向对象:UNO是面向对象的,支持聚集、集成、异常处理和多态这样的概念。

  • 基于接口:UNO的功能被集成进接口里,具有相似功能区域的组件对同样的接口有访问权限,开发者将具有组件世界的真实感觉。

  • 平台无关:UNO特意被设计成平台无关的,有OpenOffice.org的平台就有UNO

  • 支持异常:UNO提供对异常机制的支持,这意味着它可以被映射成嵌入的开发系统的出错处理机制,比如C++异常和Java异常。

  • 开发系统无关:UNO可以用现在所有的流行开发环境和编程语言实现,包括C++CVisual BasicWindows Scripting Host和所有支持COM的系统、CORBAJavaBeans组件、以及OLE

  • 支持网络:基于UNO技术的组件可以在网络上通讯,也可以在远程服务器上实现功能,比如在互联网设备上提供完整的文字处理功能。

    1. APISDK,与UDK

OpenOffice.org 应用程序接口(Application Programming InterfaceAPI)基于OpenOffice.orgUNO组件技术,由许多类CORBAIDL定义17的接口所组成。UNO组件技术决定组件和应用如何相互通讯、某种编程语言如何访问API,而API定义了独立于特定编程语言的访问OpenOffice.org功能的接口。这种接口结构对于决定开发中需要重新实现应用到何程度非常重要。

OpenOffice.org API定义的接口具有如下特征:

  • 完全是定义好的组件与环境的接口,可以轻松地组合起来满足特定对象的需求。

  • 版本无关性,通用功能和特定版本所需要的功能被区分开来;

  • 可扩展性,开发者可以从接口的一个最小集合开始逐步地增加应用的特性;

  • 可重用性,总是尽可能地采用通用的接口定义。

与其他办公套件的API不同,OpenOffice.org并不是已有实现的简单反映,它是从应用和组件开发者的角度来设计的,所以提供了几乎所有的OpenOffice.org组件程序接口,并且可以集成新的组件。

      1. 应用领域

OpenOffice.org API有很多应用领域。首先,为了自动运行某些任务可以编写典型的宏程序;其次,部分OpenOffice.org可以作为其他程序的组件运行,比如将OpenOffice.org当作JavaBeans组件来访问。另外,有一个非常有趣的应用是将OpenOffice.org的用户界面替换掉,并搭建一个完全不同的应用环境。

      1. 结构规范

OpenOffice.org API的结构规范采用的是“接口与支持类”方式,而不是“实现-继承”方式。

“接口与支持类”方式意味者对象只通过接口进行通讯,支持类被用来提供实现。这样的设计思路是因为组件是高度地环境、语言、和版本无关的。“实现-继承”方式意味着部分实现的基类,而子类从中衍生接口并继承下来。不选择这种规范的原因是在较大的系统中会导致膨胀的接口和深度继承层次。而且,主要通过基类依赖于环境的组件,也是编程语言相关和高度版本相关的。

      1. 对象模型

OpenOffice.org API是为UNO组件技术设计的,也是用它实现的。因此OpenOffice.org API是程序语言无关的,可以在C/C++Java和好几种脚本语言中使用。对于其它语言来讲,只需要一个语言绑定就能够提供对整个OpenOffice.org API的访问。该API是基于以下的原型构造的:

  • 实现类:类其实不是在OpenOffice.org API中实现的,在这里提及只是为了更好的理解。实现类实际上是使用真实的程序语言来实现服务。一般来讲,使用服务的开发者不需要处理API层次上的实现。而对象不是为应用而是为实现类翻译成实际语言概念,这点类似于Java现实类的实现。

  • 服务:对象规范称为服务。你可以把服务想象为对支持服务的实现类和使用组件所提供服务的应用都有利的“合同”。服务通常描述实现的的接口和一套参数。虽然服务通常不翻译成实际语言概念,你也可以把它看作类似于Java的抽象类。

  • 接口:API层次上某一方面的规范称之为接口。接口可被看作是“合同”内通过合法验证的文字模块,接口可以组合成整个“合同”。OpenOffice.org API中的接口非常类似于Java中的接口。

  • 结构:普通的数据块可以被定义为结构,因此结构是不含方法的。结构的优势在于它们可以传送到不同的进程甚至不同的机器,这会大大提高了进程间通讯和远程调用的效率。使用Java实现时,结构可以表示为只有数据成员和get/set方法的类。

  • 异常:异常是方法调用的非常规结果。正如在Java中一样,异常被用来处理出错。

  • 常量/常量组/枚举:常量被分成两类,可以分组和赋值为数值和字符串值的常量,和包含数值固定集的枚举。在Java实现中,这两者都表示为具有常量数据成员的类。

      1. 模块化分层

OpenOffice.org API是按照与JavaCORBA类似的层次模块概念来组织的,从上到下一共分为四层:

  • 办公软件接口,比如对文字处理、电子表格、绘图和演示文稿的接口;

  • 集成架构接口,使得能够集成进OpenOffice.org新的组件,比如配置管理和通用内容代理;

  • 应用域无关接口,这类非常重要的接口包括属性访问、集合、流操作、附加脚本引擎和其他很多接口;

  • 组件系统接口,这部分基础接口包括必要的处理对象模型的接口,比如生命期控制、查询、建立桥接、和实例化远程对象等接口。

      1. SDKUDK

OpenOffice.org软件开发工具包(Software Development KitSDK18OpenOffice.org的一个补充部件。它提供使用现有UNO组件与开发新组件编写应用所需要的工具、例程和文档。SDK的主要部分就是《OpenOffice.org开发者指南》19,这本超过1000页的内容全面的指南提供了OpenOffice.org API概念、UNO组件模型、和在不同应用上下文中如何使用API的详细介绍。这本《指南》对于利用SDK进行OpenOffice.org的二次开发具有非常重要的参考价值。利用OpenOffice.org APISDK提供的其他资源,开发者可以在不修改OpenOffice.org源代码的情况下使用自己熟悉的编程语言,基于UNO组件构建新的应用。

开发者在OpenOffice.org中有时也会看到UDKODK这样的名称,它们与SDK有联系也有区别。UDKUNOSDK的合称,而ODK实际上是指SDK中的一个模块,也用来指SDKOpenOffice.org架构和应用相关的高层部分。

    1. 融合与发展

      1. 组件桥接

现在桌面环境下所流行的组件技术有KDE/KParts20GNOME/Bonobo21CORBAMozilla/XPCOM22OLE/ActiveXOpenOffice.org/UNO等,各种组件技术之间的交互并不方便。为了在不同的环境中提供办公软件的功能,就有必要支持不同的组件技术。由于OpenOffice.org的组件技术能够使用桥接方式访问其他组件,有可能将办公组件集成进不同的环境中,比如GNOMEKDEMozilla。在组件基本概念非常相似的环境中实现桥接是相当容易的,而其他环境下想要隐藏所有的概念差异并提供桥接功能可能会非常困难。但是在很多情况下开发者和用户必须要处理不同的概念和哲学。而且如果桥接需要处理复杂的参数和调用转换,效率问题可能会凸现出来。

由于OpenOffice.org UNO支持对OLE的桥接,所以OpenOffice.org已经能够作为一个ActiveX控件在IE等支持ActiveX的程序内运行。可惜的是UNOGNOME/Bonobo桥接的项目开始后又中止了。而OpenOffice.orgMozilla提供的插件也已经开发完成,将会集成在2.0版本中。OpenOffice.orgKDE中的Konqueror 制作的插件23也已经实现了一些基本功能。

      1. 本地部件架构

VCL最初的设计中并不封装底层GUI系统的本地窗口部件或控件。平台相关部分实现了2-D图形“画布”以供VCL上层的平台无关部分使用,该“画布”将每个功能调用都重定向到了底层的GUI系统上。

后来为了使OpenOffice.org在各个平台上的观感更接近于本地系统,开始了一个称作本地部件架构(Native Widget FrameworkNWF24的项目。NWF的基本方法是使用本地桌面环境/窗口管理器提供的可视部件替换当前的基于窗口系统API实现的可视类库。现在把OpenOffice.org集成进KDE25的项目正在进行,其中就包括实现KDE本地部件架构26、和基于Qt实现VCL插件27的两个子项目。其他的针对GTK+Win32、和Apple Aqua 28NWF实现也在进行当中。



本篇主要介绍了OpenOffice.org的技术体系结构。在这一体系结构中有很多闪光之处,比如跨平台的分层结构、虚拟操作系统概念、UNO组件模型、基于IDLAPISDK等等,都对OpenOffice.org移植到众多平台上、并获得广泛的应用和赞誉贡献良多。实际上OpenOffice.org架构中还有一些优秀的特性,因为篇幅所限在这里没有详细介绍,比如基于UNO的数据库连接(SDBC)和通用内容代理/提供者(UCB/UCP)。这些技术架构的详细内容需要读者实际进行研究与开发才会有更深入的理解。

下一篇将会介绍OpenOffice.org的另一个优秀的技术特点:开放、可扩展和标准化的XML文件格式规范。



本文依据《创作共用约定》之“署名-禁止派生-非商业用途”方式发布,即你可以免费拷贝、分发、呈现和表演当前作品,但是必须基于以下条款:

  • 署名:你必须明确标明作者的名字。

  • 非商业用途:你不可将当前作品用于商业目的。

  • 禁止派生:你不可更改、转变或者基于此作品重新构造为新作品。

对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款。

在得到作者的明确允许下,这里的某些条款可以放弃。

此约定是法律文本(完整的协议)29的简单易读概要。

模块

功能描述

accessibility

提供对辅助功能的支持

apache_java

包括Apache提供的Java工具,XalanXML-APIS30

autodoc

UNO IDLC++源文件自动产生文档的工具

automation

自动测试架构

basctl

Basic集成开发环境

basic

Basic解释器和运行时库

berkeleydb

Sleepycat公司31提供的轻型数据库

bitstream_vera_fonts

Bitstream公司提供的用于拉丁语系文字的Bitstream Vera字体32

boost33

C++标准库协作的一套可移植的C++库,将会包含进C++标准库中

bridges

实现UNOC++MS Visual C++Sun Forte C++gcc等)和Java等不同语言的桥接

chaos

UCB之前使用,大部分已废弃,现在只实现邮件文档转移服务

codemaker

包含产生C++头文件、Java文件和IDL文件的程序,该程序是在unoidl编译器产生二进制格式注册表上工作的

comphelper

编写UNO组件所需的辅助类

configmgr

访问配置信息的注册表客户端UNO组件

config_office

配置编译环境

connectivity

数据库连接,包含了ODBCJDBCADOMySQLdBase等数据库驱动的实现

cosv

C++实现的工具库,包括对文件、字符串等的访问

cppu

除了Java之外所有的语言绑定所需的运行时库

cppuhelper

C++UNO辅助类的实现

cpputools

UNO工具和运行时程序的集合

crashrep

程序崩溃后的汇报工具

curl34

客户端的URL转换库

dbaccess

数据库访问层,包含从应用访问数据库相关的用户界面

desktop

产生office可执行代码,基于offmgr模块

dictionaries

拼写检查、同义词等功能所需的字典,现在只支持西方文字

dlcompat35

Mac OS X/Darwin系统中与动态加载库函数dlopen(3)兼容的库

dmake36

类似于GNU makeSun Forte dmakemake工具

dtrans

实现剪贴板管理器、MIME类型管理、拖放功能等辅助功能

embedserv

实现OLE2的接口

eventattacher

基于组件的事件处理

expat37

C语言实现的轻型XML解析器

extensions

为各种目的提供的独立UNO组件,例如OLEPGP、语音等

external

包含若干外部组件

extras

对程序正常运行至关重要的非代码性辅助文件

fileaccess

实现UCP的文件系统访问

filter

包含各种文件过滤器的实现

forms

实现窗体控件

fpicker

基于UNO实现了封装窗口系统文件对话框的文件拾取器

framework

集成不同环境(基于SFX和不基于SFX)中的应用组件

freetype38

平台无关的字体引擎,特别用于亚洲字体

goodies

辅助类(例如3-D基本功能和图形管理器)与外部图形文件过滤器

gtk

GNOME集成需要的模块

helpcontent

二进制格式的英文帮助内容,其他语言的帮助内容39需要单独下载

i18n

旧的国际化架构,只支持西方语言

i18npool

新的国际化架构,支持西方语言,东亚语言和复杂文字排版

i18n_simple

国际化的UNO实现框架

i18nutil

国际化所需的工具

icu40

IBM提供的Unicode国际化组件技术

idl

为所有基于SFX的组件由IDL生成所需的定义(头)文件

idlc

UNOIDL编译器

instsetoo

生成可执行的安装包,即将升级到instsetoo_native

io

包括基本的UNO输入/输出流的服务和进程间通讯

javaunohelper

JavaUNO辅助类的实现

jpeg

JPEG图像格式过滤器

jurt

JavaUNO运行时库,包含UNOJava绑定

jut

JavaUNO辅助工具的集合

jvmaccess

C++实现访问Java虚拟机

lingucomponent41

创建不同语言的字典、词典和其他相关工具

linguistic

UNO语言组件的封装和特定语言的实现

MathMLDTD

W3C制定的MathML DTD规范42,用于公式的文件格式

moz

编译地址簿连接驱动所需的Mozilla的头文件和库

msfontextract

libmspack43提供的解压CAB文件格式的工具,用以释放字体

nas

网络透明的C/S模式音频传输系统NAS44,用以提供对音频的支持

neon45

C接口的HTTPWebDAV的客户端库,提供对UCP的支持

netbeans_integration

SDK集成进NetBeans46 IDE的组件技术

np_sdk

Mozilla编写客户端插件需要的SDK

odk

为生成SDK进行第一步编译

offapi

包含特属于UNO组件的部分API,接口用IDL语言写成

officecfg

包含应用和组件的配置schema

offmgr

包含全局功能配置的资源和代码,基于sfx2,与svx模块紧密相关

offuh

生成UNOC++头文件,任何API模块中产生代码的文件若有变化则须更新

openssl47

支持SSL/TLS的开源工具包

package

实现打包压缩功能的UNO组件

padmin

打印机管理工具,用来在UNIX平台上配置打印机

psprint

产生PostScript代码,是当前UNIX平台上的打印方式,即将支持CUPS48

psprint_config

PostScript打印机的配置文件集合

python

Python49语言运行环境,用以支持UNO-Python桥接

pyuno

实现UNO-Python桥接

qadevOOo

自动化完成产品的测试

rdbmaker

由二进制格式注册表产生子集或进行反射

readlicense

自述文件和许可证文件

readlicense_oo

OpenOffice.org自述文件和许可证文件

regexp

GNU C50提供的正则表达式处理程序,用C++做了封装

registry

通用注册表的实现

remotebridges

包含进程间UNO桥接的UNO服务,例如IIOP桥接

res

包含位图、图标、光标文件这样的典型资源文件

ridljar

生成Java类文件,udkapi模块中任何产生代码的文件若有变化则须更新,该模块还包含一些Java实现的核心API,例如Any类型

rsc

资源编译器,从用户界面的文字描述生成二进制描述

rvpapi

Java实现远程通讯的接口

sablot

来自于Ginger联盟51C++实现的XSLT处理器

sal

系统抽象层,集成了所有支持平台的底层API,定义平台无关的C语言API

salhelper

系统抽象层的辅助类

sandbox

基于Java 的安全管理器

sane

支持SANE52接口扫描设备的文件

sax

XML SAX53解析和输出的UNO组件

sc

电子表格应用组件

scaddins

电子表格应用的附件

sch

图表应用组件

scp

安装脚本文件,即将升级到scp2

scptools

打包工具

sd

演示文稿应用组件和绘图应用组件,它们由相同的代码基产生

sdk_oo

SDK进行第二步编译,生成最终的完整工具包

setup2

安装程序的实现,即将升级到setup_native的本地安装方式

sfx2

SFX是应用架构的核心模块

shell

实现某些shell命令的工具,例如网络代理设置和命令行邮件

sj2

提供对嵌入式Applet程序的支持,也用Java实现了JavaScript引擎

smoketest

安装程序的粗略测试

so3

包含组合文档对象的基础实现部分,也实现了OLE桥接

solenv

编译环境(solar

soltools

solar编译环境所需的工具

sot

Microsoft Office兼容的存储实现方式

starmath

数学公式应用组件

stlport54

多平台的标准C++模板库的实现

stoc

基本UNO服务

store

可信赖、可恢复的存储所需的包含文件和数据流的文件访问,由registry使用

svtools

基于VCL的工具集

svx

2-D3-D绘图引擎,以及其他与应用架构无关的共享库

sw

文字处理应用组件

sysui

实现与桌面系统环境的集成

testshl

旧的测试脚本,已废弃

testshl2

新的测试脚本

testtools

测试工具

toolkit

UNO工具包和控件实现VCL

tools

包含字符串、时间、日期、流等基本类

transex3

本地化工具

twain

支持TWAIN55图像获取设备标准的文件

ucb

UCB核心的实现和相关辅助服务,也包括各种UCP

ucbhelper

使用UCB和实现UCP需要的C++辅助类

udkapi

包含属于UNO核心的部分API,接口用IDL语言写成

udm

C++工具类,实现对HTMLXML、和组合数据类型等的支持

unixODBC56

Windows平台上提供的支持ODBC的开源软件

UnoControls

包含非直接调用VCLUNO控件,这些控件使用抽象窗口工具包

unoil

生成Java类文件,offapi模块中任何产生代码的文件若有变化则须更新

unotools

提供基于UNOAPI的辅助类

unzip

自由的infozip57压缩库

uui

提供UCB图形用户界面的组件

vcl

可视类库,窗口管理与基本控件库,也包含用户界面的系统抽象层

virgule

实现获取击键事件、操纵键盘映射的功能

vos

虚拟操作系统层

wizards

应用中向导所需的基本宏和库

x11_extensions

X-Window扩展库中render相关的头文件

xml2cmp

实现UNO组件描述的处理器

xmlhelp

UCP方式实现的帮助

xmloff

XML的输入/输出过滤器

xmlscript

实现XML对脚本的支持

XmlSearch

Java实现的对XML的查询引擎

zlib58

一个没有法律风险的自由软件,实现数据压缩功能

1 OpenOffice.org 1.1.2源代码模块的功能描述表




2 OpenOffice.org 1.1.2源代码模块依赖关系树状图


2 OpenOffice.org 1.1.2源代码模块依赖关系树状图




1OpenOffice.org移植,http://porting.openoffice.org/

2STLporthttp://www.stlport.org/

3OpenOffice.org图形系统,http://www.gsl.openoffice.org/

4OpenOffice.org工具,http://util.openoffice.org/

5OpenOffice.org通用对象模型/组件模型,http://udk.openoffice.org/

6OpenOffice.org通用内容代理,http://ucb.openoffice.org/

7OpenOffice.org脚本架构,http://framework.openoffice.org/scripting/index.html

8BeanShellhttp://www.beanshell.org/

9OpenOffice.org架构,http://framework.openoffice.org/

10OpenOffice.org图形应用,http://graphics.openoffice.org/

11OpenOffice.org公共用户界面,http://ui.openoffice.org/

12OpenOffice.org数据库访问,http://dba.openoffice.org/

13OpenOffice.org文字处理,http://sw.openoffice.org/

14OpenOffice.org电子表格,http://sc.openoffice.org/

15OpenOffice.org Python-UNO桥,http://udk.openoffice.org/python/python-bridge.html

16OpenOffice.org Perl-UNO桥,http://perluno.sourceforge.net/

17OpenOffice.org IDL参考,http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html

18OpenOffice.org软件开发工具包,http://api.openoffice.org/SDK/index.html

19OpenOffice.org开发者指南,http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html

20KDE Kpartshttp://developer.kde.org/documentation/tutorials/kparts/

21GNOME Bonobohttp://www.gnome.org/gnome-office/bonobo.shtml

22Mozilla XPCOMhttp://www.mozilla.org/projects/xpcom/

23cuckOOo项目,http://kde.openoffice.org/cuckooo/index.html

24OpenOffice.org本地部件架构,http://people.redhat.com/dcbw/

25OpenOffice.org KDE集成项目,http://kde.openoffice.org/

26OpenOffice.org KDE本地部件架构,http://kde.openoffice.org/nwf/index.html

27OpenOffice.org QT VCL插件,http://kde.openoffice.org/ooo-qt/index.html

28NeoOffice.orghttp://www.neooffice.org/

29创作共用协议的完整法律文本,http://www.creativecommons.cn/licenses/by-nd-nc/1.0/legalcode

30Apache XML项目,http://xml.apache.org/

31Sleepycat公司,http://www.sleepycat.com/

32Bitstream Vera字体,http://www.gnome.org/fonts/

33C++ Boosthttp://www.boost.org/

34cURLhttp://curl.haxx.se/libcurl/

35dlcompathttp://www.opendarwin.org/projects/dlcompat/

36dmake项目,http://dmake.wticorp.com/

37Expathttp://expat.sourceforge.net/

38FreeType组织,http://www.freetype.org/

39OpenOffice.org非英语帮助内容,http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/helpcontent/

40Unicode国际化组件,http://oss.software.ibm.com/icu/

41语言组件,http://lingucomponent.openoffice.org/

42W3C MathML DTD规范,http://www.w3.org/TR/REC-MathML/

43libmspackhttp://www.kyz.uklinux.net/libmspack/

44NAShttp://nas.codebrilliance.com/

45neon库,http://www.webdav.org/neon/

46NetBeans组织,http://www.netbeans.org/

47OpenSSLhttp://www.openssl.org/

48公共UNIX打印系统,http://www.cups.org/

49Python程序语言,http://www.python.org/

50GNU C库,http://www.gnu.org/software/libc/

51Ginger联盟,http://www.gingerall.org

52SANEhttp://www.sane-project.org/

53SAXhttp://sax.sourceforge.net/

54STLport组织,http://www.stlport.org/

55TWAINhttp://www.twain.org/

56unixODBChttp://www.unixodbc.org/

57Info-ZIPhttp://www.info-zip.org/

58zlibhttp://www.zlib.org/

  1. 作者简历

1994年入学清华大学电机工程与应用电子技术系,2002年毕业于该系,获电气工程专业工学硕士学位。

1996年起接触UNIX平台上的大型工业控制和分析软件系统研发,1997年开始尝试自由和开源软件,1999年完成了国内第一套基于GNU/Linux平台的能量管理/调度员培训仿真(EMS/DTS)一体化系统的移植工作,并于2000年在广西玉林电网投入现场运行,该项目获得年度广西科技进步三等奖。

2002年加入Sun中国工程研究院,专注于StarOffice/OpenOffice.org相关技术工作。现为结构化信息标准促进组织(OASIS)所设立的开放办公XML格式技术委员会(Open Office XML Format TC1成员。

  1. 序言

随着自由软件和开放源码运动的发展,越来越多的个人和团体对Linux等开放源码操作系统平台熟悉起来。作为开源操作系统系统上应用最广泛的办公软件,OpenOffice.org也逐渐被越来越多的用户和开发者所了解、接受与喜爱。但是在这一不断学习和推广的过程中,他们常常会遇到很多问题。其中的一些是:

用户应该如何学习使用OpenOffice.org,在使用过程中遇到了困难,该循什么途径解决?软件开发者该怎样参与开源社区的建设、了解OpenOffice.org的技术,并编写自己的软件?软件厂商可以如何利用OpenOffice.org的架构和实施方案,参考成功案例,搭建自己的软件平台,为用户提供自己的服务和附加价值?企业和其他团体用户如何利用OpenOffice.org进行信息化建设,保护投资与降低总持有成本(Total Cost of OwnershipTCO);国家如何利用OpenOffice.org等开源技术提高互联网络上信息的共享和交流,保护信息安全。

本系列讲座并非试图解决以上所有的问题,只是作者从系统架构的角度出发进行探讨,期望能够对读者,尤其是软件开发者深入了解OpenOffice.org有所裨益。“深入了解OpenOffice.org”系列讲座共分为三篇:第一篇“OpenOffice.org简介”,主要介绍OpenOffice.org的发展轨迹、若干易产生误解的问题、OpenOffice.org的应用概述,以及社区的结构和运作机制,志愿者和团体参与社区建设的途径,社区的通讯和协作方式,与之关系较为密切的若干开源软件社区;第二篇“OpenOffice.org体系结构”,主要介绍OpenOffice.org的技术架构、编程语言、组件对象模型、应用程序接口、二次开发包以及与其他组件的关系;第三篇“OpenOffice.org中的XML应用”,主要介绍OpenOffice.orgXML文件格式规范、基于XSLT的文件过滤器、与OASIS Open Office XML格式的关系。希望能够通过这些介绍,使开发者对OpenOffice.org的技术特点有更深入的了解,有更多的志愿者参与到OpenOffice.org社区的建设中来,共同推广OpenOffice.org的发展与应用。

在此特别说明一点,本系列讲座的所有文字都是在OpenOffice.org 上完成创作的。

  1. OpenOffice.org简介

    1. OpenOffice.org发展轨迹

        开放源码的时代背景

上世纪90年代开始的Internet的爆炸性发展给个人和整个软件产业都带来了一场巨大的变革。随着互联网络的高速发展,传递信息的速度越来越快,而发布信息的成本却在不断地降低。传统专有软件商在软件发布和维护成本不断降低的同时,仍然试图通过昂贵的许可证方式分发软件。而消费者希望能够快速、廉价甚至自由地获得具有必要功能的、稳定和可用的产品。这样就凸现了一个原先并不明显的矛盾:前互联网时代的版权法规限制着软件和信息产品在网络上的自由传播,称之为“盗版”,普通大众需要一种合法的、成本可接受的方式来获得必要的软件和信息产品2。有需求就有市场。起源于80年代的自由软件和开放源码运动在潜行了相当长一段时期之后,从此具有了适合的土壤而蓬勃发展起来。

对于计算机的普通用户来说,具有文字处理、电子表格、演示文稿、数据图表、公式编辑、简单绘图和图片处理等功能的办公软件已经成为一种“生产力软件”,也就是能够大幅提高生产力的基础软件。但是占据市场份额超过90%Microsoft Office却一直是价格昂贵的专有软件,其中的大部分功能个人用户很少用到。所以对消费者来说,它逐渐地已经成为一种奢侈品,然而现在的大部分用户因为专有文件格式被锁定在其上,不得不继续使用其升级产品。广大用户希望能够出现一种替代昂贵专有办公软件的廉价、稳定、具有足够功能并且可用的办公软件。

        OpenOffice.org的历史

OpenOffice.org来自上世纪八十年代中期在德国创立的一家软件公司Star Division,它生产一种叫做StarOffice的办公软件,市场主要集中在欧洲。因为价格低廉、稳定、跨平台、功能充足等优点获得了用户的好评。Sun Microsystems意识到市场上需要这样一种替代专有软件的产品,并且认为公司的愿景与策略和StarOffice的技术背景都与这样的市场需求和趋势相吻合3。于是Sun19998月收购了Star Division公司,并于翌年7月资助建立了OpenOffice.org社区。同年10月,公布了StarOffice绝大部分源代码(大约800万行),由此成为世界三大开源社区之一(另外两个是MozillaApache);12月,发布了OpenOffice.org XML文件格式规范。20017月,OpenOffice.org 开发工具包发布。20025月,OpenOffice.org 1.0正式发布。20033月,OpenOffice.org 2003首届年会4在德国汉堡召开。200310月,OpenOffice.org 1.1.0 发布。

迄今为止,OpenOffice.org已经发布了1.1.2版本,支持WindowsLinux/x86Linux/PowerPCSolaris/SparcSolaris/x86FreeBSDMacintosh7CPU/OS平台,正在进行另外10种平台的移植,支持的语言也达到了42种。统计显示5,截至20046月,OpenOffice.org已经被下载超过2600万次;电子邮件列表的注册人数也超过了24千人,已经有434个人和团体签署了《共同版权委托协议》6承诺为OpenOffice.org社区贡献代码。OpenOffice.org现在已经成为全球领先的跨平台、全功能、多语言、公开对象接口、可扩展文件格式的开源办公软件。

OpenOffice.org的下一个版本是2.0,主要目标是实现与Microsoft Office更好的互操作性、更低的用户再培训成本、更优秀的性能、广泛提高的易用性、更易用的程序接口、更好地集成进本地桌面系统。OpenOffice.org 2004年会也将于今年9月在德国柏林举行。

实际上,OpenOffice.org不只是一个办公软件产品,它也是一个开发平台,开发者可以基于它提供的应用程序接口组建自己的产品,设计并实现完整的解决方案;它也是一个网络社区,世界各地成千上万的用户和软件开发者每天都在这里交流;它还是一种信念:办公软件这种生产力工具已经成为社会信息基础设施的必要组成部分,而OpenOffice.org正是通过开放源码社区来使之为更广泛的人群服务,推动整个社会的信息化水平。

    1. SunStarOffice的关系

从历史上看,OpenOffice.org来源于StarOffice,它在OpenOffice.org成立前的最后一版是5.2。在SunStarOffice的绝大多数源码开放之后,StarOffice也是基于OpenOffice.org来开发的。也就是说OpenOffice.orgSun资助的,但是不属于SunStarOffice才是Sun所有的产品。而Sun所提供给OpenOffice.org社区的源代码一经发布,就无法收回。Sun从此无法关闭OpenOffice.org,因为它是属于公有领域7的。由于StarOfficeTM这个商标已经被注册了,Sun就在东亚地区为StarOffice注册了StarSuiteTM这个商标,StarOfficeStarSuite实际上是同一产品的西方和东方语言版本。

因为StarOffice的源码里含有少量的第三方代码,而这些代码是Sun付费才获得许可在StarOffice中使用的,所以OpenOffice.org并不包括这部分源码。这些不可公开的代码实现以下功能:

  • 某些字体,特别是亚洲语言字体(例如方正宋体、方正黑体等);

  • 数据库模块(StarOffice中包含了Software AG公司的数据库Adabas D);

  • 一些文档模板;

  • 增强的剪贴画图库;

  • 一些亚洲语言的增强功能;

  • 某些文件过滤器。

事实上,现在文档模板和剪贴画在OpenOffice.org社区里已经可以找到比较丰富的资源,桌面数据库现在也已经有了比较成熟稳定的开源产品,亚洲语言的增强功能和某些特定文件过滤器也并不是至关重要的功能,但是缺乏丰富的字体,可以说是OpenOffice.orgStarOffice相比的一个最大的缺点。这也跟现在没有质量很好的开放源码字体有直接的联系,优秀中文字体的许可证是相当昂贵的,而OpenOffice.org这样的非盈利组织无法负担地起这样高昂的费用。

      1. License问题

OpenOffice.org采用GNU通用公共许可证(GPL)和Sun工业标准源码许可证(Sun Industry Standards Source LicenseSISSL8的“双许可证”方式对源码进行许可;采用独立的公共文档许可证9Public Documentation LicensePDL)对发布在OpenOffice.org网站上、但不期望集成进软件的绝大多数文档进行许可。

“双许可证”方式意味着要么应用GNU GPL许可证,要么应用SISSL许可证。当应用GPL许可证的时候,OpenOffice.org源码中的库和组件功能将根据GNU LGPL进行许可。由于LGPLGPL完全兼容,这样就能够鼓励更多的人参与到OpenOffice.org社区建设中来。

SISSL则是为商业应用设计的。由于GPL许可证对于自由复制、修改、发布等权利的严格保证,某些软件商会因此而受限、不能参与到开放源码社区中来。OpenOffice.org的双许可证方式解决了这个问题,他们可以选择根据SISSL进行许可。SISSL是经过开放源码促进会(Open Source InitiativeOSI)确认的开放源码许可证10,它规定在被许可者承诺保证“标准”一致的条件下,可以分发软件但不公开修改过的源代码。这里的“标准”是指OpenOffice.orgXML文件格式规范11,和OpenOffice.org的应用程序接口规范12

    1. OpenOffice.org应用

        开源社区

OpenOffice.org本身优良的性能促进了它的应用。现在世界范围内几乎所有的Linux发行版都附带了OpenOffice.org或其衍生软件。OpenOffice.org的使用者还建立了一些组织和网站来推广OpenOffice.org的应用,比如OpenOffice.org文档项目13OpenOffice.org论坛14、关于附件和模板的OpenOffice.org Extras15、关于宏的OpenOffice.org Macros16OpenOffice.org帮助在线17Taming OpenOffice.org18GetOpenOffice.org19ByteBot.net20ClueSheets21Itrainonline22Digital Distribution23等网站也已经开始提供OpenOffice.org的在线培训服务。

网上书店上关于OpenOffice.org的使用类书籍已经有几十本,并且还在不断增加。关于OpenOffice.org的技术类书籍也已经出版了一些,例如关于XML文件格式要义的《OpenOffice.org XML Essentials24和《OpenOffice.org Macro Explained25

亚洲地区的一些国家和地区也在积极推广OpenOffice.org的应用。日本建立了OpenOffice.org文档翻译项目26和用户组织27;韩国也建有OpenOffice.org用户组织28;中国台湾地区的OpenOffice.org应用也非常活跃,台南县教育网建立了“OpenOffice.org补给站”29,台湾高性能网络计算中心也建立了OpenOffice.org讨论组30,有些个人爱好者31建立了个人维护的OpenOffice.org论坛,甚至还长期提供提高中文版面效果的独立补丁(该补丁已加入OpenOffice.org源代码的CVS服务器)和安装包。

        衍生软件

自从OpenOffice.org 1.0公布以来,有些地区,特别是亚洲地区,根据OpenOffice.org的双许可证方式发布并包装了具有本地特色的办公软件。比如Pladao Office32就是为了提高泰文的本地化,依据LGPL/SISSLJCA协议8而定制的OpenOffice.orgBharateeyaOO33是印度信息通信技术研究培训中心为了提高OpenOffice.org对印度各种方言和民族语言的支持而资助的加强本地化的项目。非洲地区也开始了为本地民族语言基于OpenOffice.org进行本地化的公益项目。

国内一些软件企业根据SISSLOpenOffice.org的基础上进行中文化、定制化和扩展功能的开发。比如中文俩仟的RedOffice、金山的KingStorm飓风Office、中标软件的中标普华Office、共创开源的共创Office、即时软件的即时全能办公室、KaiSource公司的KaiOffice等。

中国有55个少数民族,除了回族和满族已基本不使用自己的民族语言和文字以外,其他53个民族仍在使用的民族语言有72种。其中29个民族有与自己的民族语言相一致的文字,由于有的民族有一种以上的文字,所以这29个少数民族共有54种民族文字34。少数民族语言文字在少数民族社会生活种起着十分重要的、其他民族的语言文字无法替代的作用,所以为这些语言文字提供信息化手段是提高全国整体信息化水平的重要组成部分,是延续多民族的传统文化的重要手段。

为了实现支持民族语言的跨平台信息处理系统,国家863计划设立了重大软件专项课题“民族语言版本Linux操作系统和办公套件研发”35。该专项中的办公套件就是在OpenOffice.org的基础上针对藏文、蒙文、维文等主要民族语言提升本地化的水平,以期达到实用性的效果,具有很高的政治意义和社会意义。该项目已经取得阶段性成果36

      1. 用户市场

早期OpenOffice.org的用户主要分布在欧洲地区,这和OpenOffice.org起源于德国、所以西方语言支持比较好有很大关系。欧洲的很多政府机构、公司、学校、非盈利机构甚至个人都在广泛使用OpenOffice.orgJupiter Research2003年的一项研究报告中认为OpenOffice.org在小型商业机构的市场份额已经达到6%,另有3%2004年有应用计划。

团体用户在削减IT预算的时期,更加注重于从降低总持有成本的角度来考量。德国慕尼黑政府经过一年的评估,最近决定将市政当局的14000PCMicrosoft Windows/Office迁移到LinuxOpenOffice.org,这一降低政府开支的举措引起了各国政府的广泛关注,具有强烈的示范效应。

随着OpenOffice.org的不断推广,其他地区的用户也开始注意和尝试OpenOffice.org。北美和拉美地区的一些企业、学校、和政府机构也在评估将OpenOffice.org作为日常办公套件的可行性,并已经开始了试用。37

OpenOffice.org所具有的优秀特性使它获得了广泛赞誉。38例如Linux Format 2001年读者选择奖“最佳商业软件”;XML Journal 2002年读者选择最终奖“最具创意的XML应用”;Linux Journal 2002年编辑选择奖“最佳办公软件”,2003年读者选择奖“最受欢迎的办公软件”;Open for Business 2003年开放选择奖“最佳办公软件”;O’RELLY下属的OSDir.com 2003年编辑选择奖“桌面开源软件最佳应用”,等等。

    1. OpenOffice.org社区

      1. 理事会

OpenOffice.org社区由社区理事会39进行管理,理事会章程40也是由社区成员起草,经过全体社区成员讨论和修改,几乎以全票通过。理事会是由社区成员志愿组成的非自治组织,建立理事会的目的是在战略规划与资源分配、协调与资助者和公众的关系、在整个社区内提供仲裁这些方面提供指导。理事会可以调节冲突并为社区成员提供论坛,它也可以对项目的目标发表意见。理事会除此之外的权利在章程中被严格限制。

理事会由九名成员组成,这些成员都是各个项目的代表,他们也基本上都是项目中活跃的贡献者,在若干方面颇有建树,获得了其他贡献者的尊敬。这九名理事会成员包括:

  • 五名成熟类项目代表,其中有一名作为项目领导的Sun雇员,一名作为项目领导的非Sun的程序员,一名非程序性项目的管理者,其他两名项目领导或社区管理者;

  • 两名本地语言类项目代表,从成熟的本地语言类项目领导中选出;

  • 一名社区贡献者代表,来自于孵化类项目领导和杰出成员;

  • 一名Sun公司代表。

理事会每月至少召开一次会议,如有必要也可临时召开。会议以互联网中继聊天(Internet Relay ChatIRC)的形式召开,会后通过电子邮件确认会议记录。任何社区成员都有权查看会议记录,并向理事会提案。

      1. 项目

OpenOffice.org社区内的资源是以项目的形式组织起来的,分为四大类:理事会、成熟类41、孵化类42、本地语言类43、网站资源。理事会类包含了与社区管理运作相关的信息,网站资源类包括OpenOffice.org下载、技术支持、开发资源的信息。

成熟类项目是指那些包含核心技术、或者关键用户信息的项目,现在共有22个。比如应用架构、组件技术、应用程序接口、XML文件格式、编译工具和环境、安装工具、数据库访问、图形系统层、用户界面、文字处理、电子表格、图形应用、语言模块、本地化、移植、文档、质量保证、市场推广等等。成熟类项目通常是社区开发者关注的焦点。

孵化类项目用来给社区成员提供测试想法的空间。这些想法可能是编程性的,也可能不是。只要能表明想法对社区明显的支持,任何社区成员都有权利创建一个孵化类项目。现有的孵化类项目共11个,包括:参考文献、商务拓展、软件发布、群件、KDE集成、项目管理、脚本、技术规范、社区统计、用户FAQ等。

本地语言类项目用来以用户的本地语言提供更多信息和资源,相关的工作包括翻译OpenOffice.org社区内的资料,介绍本地语言版本内所特有的资源和信息等。现在已经包含的本地语言包括:汉语、阿拉伯语、印地语、日语、韩语、老挝语、泰米尔语、泰语、越南语等37种语言。其中的汉语项目--“OpenOffice.org中文计划44”是由台湾地区的几名志愿者维护的,支持繁体和简体中文两个版本。

      1. 参与贡献

OpenOffice.org社区欢迎公众对OpenOffice.org的关注与支持,为此建立了必要的设施使得开放源码技术能够被所有感兴趣的参与者获得。参与者可以很方便地下载软件、获取技术支持、以及开发资源。

实际上无论角色如何,每个人都可以对OpenOffice.org项目提供帮助。参与越多则越能获得他人的信任和支持,项目的长期有价值的贡献者会获得直接向代码库提交代码的权利。OpenOffice.org网站上注册的用户都是OpenOffice.org的“成员”,社区鼓励成员参加到项目中并订阅该项目的电子邮件列表。参加到项目中的成员首先的身份是“观察员”,如果对项目的贡献频繁并确有价值,就能够获得“开发者”的身份,拥有对代码库的写权限,只对项目文档有写权限的成员称之为“内容开发者”。开发者在提交不止于微小改动的代码前必须要签订《共同版权委托协议》8。项目开发者定期选举项目领导,项目领导负责指导该项目的方向,确保相关问题都被解答,并负责创建友好并相互支持的社区环境。

现在已经有很多个人和团体对OpenOffice.org社区作出贡献。DebianSuSERedHat对软件打包,GNOMEKDEXimian对桌面集成与用户界面修饰方面都有贡献。Ximian甚至还建立了专门的OpenOffice.org网页45提供非官方的资源。虽然国内OpenOffice.org及其衍生软件的应用已经非常广泛,可惜的是,迄今为止只有寥寥几人签订了《共同版权委托协议》承诺为OpenOffice.org社区贡献代码。

其实开发者可以参与OpenOffice.org社区的方面很多,编写脚本与宏、扩展与集成组件、编译除错并提高源码、向新平台移植、本地化与国际化、撰写使用与开发文档、测试与质量保证等等。都是不错的开发型入手点。另外,技术支持和市场推广也是不错的非开发型参与方式。

OpenOffice.org社区由CollabNet提供主机并负责日常管理,代码库采用CVS维护,以IssueZilla管理“问题”。社区成员的主要交流方式包括电子邮件与邮件列表、IRC、网络日志(Blog)、时事通讯(News Letter)等。社区成员也会经常为媒体撰写文章并接受访问。由于OpenOffice.org社区成员来自于世界各地,所操母语千差万别,为了沟通方便起见广泛采用英语作为通行语言。

    1. 相关开源软件社区

全世界众多开源社区能够进行交流的基础是他们都认同开放源码软件的基本理念。OpenOffice.org社区作为三大开源社区之一,在获得开源软件领域广泛关注的同时,也获得了普遍的支持,与其他开源社区建立了密切的协作关系。比如:

  • Mozilla社区为了实现OpenOffice.orgMozilla浏览器中的插件而密切合作;

  • Apache社区为OpenOffice.org提供了优秀的XML/XSLT46软件,并且在POI47项目中与OpenOffice.org合作将MS Excel文件格式文档化48,它的Cocoon49项目及其子项目Forrest50在服务器端能够把OpenOffice.org无缝集成进内容管理系统;

  • OpenGroupware51社区与OpenOffice.org群件项目52协作以提供邮件、日志、即时消息和白板等功能,其客户端软件Glow正在开发中;

  • CPAN53社区中的OpenOffice::OODoc54项目支持PerlOpenOffice.org文档的访问;

  • Zope55/Plone56社区用Python实现了内容管理系统/架构,OpenFlow57以此为基础实现了工作流管理系统,它们现在都是非常流行的开源软件。Zope中所包括的CMFOODocument58ZooDocument59支持对OpenOffice.org文档的访问,由此OpenOffice.org可以作为内容著作工具而集成进该内容管理系统。基于Zope/Plone的软件商icoya60就提供了包含OpenOffice.org的内容管理解决方案。国内也有一些Zope/Plone的相关社区,例如:Python中文社区61Zope/Plone中文社区62、中文Zope用户组63,中蟒(中文Python64等等。

OpenOffice.org及其它相关开源社区相互协调、共同发展,就可以为个人消费者和团体用户提供更优秀的软件以及整体解决方案。比如在办公自动化、电子出版、工作流、内容管理等领域,OpenOffice.org及其解决方案就有广阔的应用前景。



本篇对OpenOffice.org进行了简要介绍,概述了它的发展轨迹、应用现状与前景、社区组织结构等基本信息。读者可以看到,OpenOffice.org的应用范围不断扩大,与用户和开发者积极参与社区建设、第三方软件厂商的大力支持都是分不开的。作者在此也很希望国内能够有更多的软件开发者和其他志愿者积极参与到OpenOffice.org社区的建设中来。这不仅有利于促进OpenOffice.org的提高和应用,同时也有利于提高国内软件行业人员的技术与交流水平,从而有利于从整体上提高国内软件行业的国际化程度与竞争实力。

OpenOffice.org之所以能够获得广泛应用,原因不仅如此,更深刻地是在于它优秀的跨平台架构和开放的XML文件格式这些技术特性。下一篇将会重点介绍OpenOffice.org优秀的跨平台技术架构。

  1. 一般问题

    1. 什么是OpenOffice.org

OpenOffice.org是一个世界范围内领先的、完全免费的、开放源码的、跨平台的、功能强大的办公软件。OpenOffice.org来源于创立于上世纪80年代的德国公司Star Division,该公司的主要产品StarOffice由于其价格低廉、功能充分、支持多种语言和跨平台等优势风行于欧洲。Sun公司于1999年收购了该公司,又于2000年成立了OpenOffice.org开放源码社区,将StarOffice的绝大多数代码公开于世。经过四年的发展,OpenOffice.org现在支持17种平台、42种语言,它的直接下载量已经超过2500万次。OpenOffice.org已经成为全球领先的跨平台、全功能、多语言、公开对象接口、可扩展文件格式的开源办公软件。

    1. 为什么叫做OpenOffice.org

OpenOffice.org是这个办公软件的名称,也是其社区的URLhttp://www.openoffice.org)。由于在OpenOffice.org成立之前“OpenOffice”已经被注册了商标,所以最终选择了OpenOffice.org作为其正式名称。OpenOffice.org也经常被简称为字母缩写“OOo”,或者比较随意的“OO”

OpenOffice.org的名称也表示该社区是以建立世界范围内领先的、开放的办公软件为其使命。

    1. OpenOffice.orgSunStarOffice/StarSuite有什么关系?

OpenOffice.org是由OpenOffice.org社区来进行管理和维护的,它是开放源码的软件。早期版本的StarOfficeOpenOffice.org的代码来源,在OpenOffice.org社区成立之后,Sun依据其双许可证之一的《Sun工业标准源码许可证》继续开发非开放源码的办公软件,仍称之为StarOffice。由于StarOffice已经在东亚地区被注册了商标,所以在此地区StarOffice采用了StarSuite作为其商标和产品名称。但是从技术上讲,StarSuiteStarOffice的东亚语言版本。

    1. OpenOffice.orgRedOffice、共创Office、飓风Office等有什么关系?

中科红旗中文两千公司的RedOffice、共创开源公司的共创Office、金山软件公司的飓风(KingStormOffice都是与StarOffice/StarSuite类似的OpenOffice.org的衍生软件。它们都遵循《Sun工业标准源码许可证》基于OpenOffice.org的开放源码来开发非开放源码的软件。

    1. 大中华区现有那些OpenOffice.org的衍生办公软件?

现在已知的基于OpenOffice.org的衍生办公软件,除了上述提到的RedOffice、共创Office、飓风(KingStormOffice,还有中标软件公司的普华Office(其前身是唐舟Office)、湖南金智科技的ChinaOffice、即时软件的“即时办公室”(ThizOffice)、香港KaiSource公司的KaiOffice和威宝拓展的NextOffice

    1. 世界上现在一共有多少种OpenOffice.org的衍生办公软件呢?

这个总数现在很难统计,但是已知的除了上述大中华区域的几种之外,还有:Novell OfficeMicrostarOfficeLycoris ProductivityPak、匈牙利语版的MagyarOffice、波兰语版的OpenOfficePL、泰语版的Pladao Office、印度土著语言版的BharateeyaOO、以及专为MacOS X平台的NeoOffice

这些OpenOffice.org的衍生软件可能遵循的是OpenOffice.org所允许的不同的许可证。

    1. OpenOffice.org与永中Office有什么关系?

OpenOffice.org和无锡永中公司的永中Office技术上基本没有什么直接联系,永中Office并不是OpenOffice.org的衍生软件。永中Office是完全采用Sun公司发明的Java语言编写的,依赖于Java虚拟机(运行环境)的办公软件。

    1. OpenOffice.org都有哪些版本?

OpenOffice.org的第一个版本是1.0版,后来陆续公布了1.0.x版本,和1.1版与1.1.x版本。OpenOffice.org即将问世的是2.0版本。

OpenOffice.org的版本编号规则是:主版本号表示重大的改进,第一副版本号表示比较重大的改进,第二副版本号则主要表示修正错误,以及小范围的改进。

    1. 谁应该考虑使用OpenOffice.org

OpenOffice.org是完全免费的、文件格式开放的、跨平台的、功能完善的办公软件。所以希望利用其优势的用户都可以考虑使用OpenOffice.org,包括普通消费者用户、政府、非盈利机构、商业团体等。OpenOffice.org尤其适合在开放系统上的用户使用。

    1. OpenOffice.org采用什么文件格式?它有什么好处?

OpenOffice.org采用XML技术来表示其文件格式,并将这种文件格式完全公开。OpenOffice.org并且已经将其文件格式提供给国际性标准机构“结构化信息标准促进组织”(OASIS)所设立的开放办公XML格式技术委员会(Open Office XML Format TC),该委员会正在以此为基础讨论建立开放的办公软件的XML文件格式标准。欧盟正在考虑将该文件格式标准采纳为欧洲的办公软件格式标准,预期将会在2005年将其提交给国际标准化组织(ISO),成为正式的官方国际标准。

采用标准化的、公开的、可扩展的文件格式,有力地保证了用户真正拥有自己的文档中的数据,消除了用户因为要考虑文件的延续性和可兼容性而被锁定在封闭的办公软件供应商之上的风险。它能够加强办公软件提供商的竞争,明显降低用户的采购和使用成本,提高他们的投资效益。

    1. 怎样得到最新版本的OpenOffice.org

OpenOffice.org社区的网站上有明显的链接地址指向中文OpenOffice.org的各种版本安装包。你也可以从绝大多数的Linux发行版中找到OpenOffice.org或者其衍生软件。国内网络中也有很多网站提供了各种不同版本的OpenOffice.org下载资源,可以通过各种搜索引擎查询,或者直接在各下载网站搜索。

    1. 我发现了OpenOffice.org的一些问题,我该如何反馈?

OpenOffice.org作为开源社区管理和维护的开源软件,非常乐于看到OpenOffice.org的用户向社区反馈OpenOffice.org的问题。你可以订阅OpenOffice.org的各种电子邮件列表、参与其中的讨论,也可以注册OpenOffice.org社区的帐号,向其中提交问题、缺陷、或者建议。也可以更加深入地参与OpenOffice.org社区的建设。

国内也有一些网上论坛和社区讨论OpenOffice.org及其衍生软件的问题,你也可以参加其中的讨论。

    1. OpenOffice.org对教育和科研用户有什么特殊优势?

OpenOffice.org是对任何人都完全免费的办公软件。对于教育和科研用户,使用OpenOffice.org更有利于降低成本,更加充分、高效地利用有限的教育资源。使用和推广OpenOffice.org还有利于更早地推广自由和开放源码软件的精神,倡导广泛地合作和开放,提高整个国家的信息化水平。

    1. 我能如何得到更多的OpenOffice.org相关信息?

访问OpenOffice.org社区的网站,或者其中文计划的网页(http://zh.openoffice.org),你会得到更多翔实的信息。

    1. Sun是如何支持OpenOffice.org的,它为什么要这么做?

Sun公司认为“网络就是计算机”是未来计算机和网络的发展方向,而标准化、协作、开放则是这一过程的必然趋势。为了让更多的计算机用户更方便地、有效率地使用计算机和丰富的网络资源,Sun公司发起成了OpenOffice.org社区并资助其发展。随着OpenOffice.org的发展和广泛应用,广大的计算机用户将是最大的获益者,Sun公司也会因顺应发展方向的努力而获益。

  1. 使用问题

    1. 安装OpenOffice.org的系统需求如何?

OpenOffice.org支持广泛类型的系统,并且只有很低的配置需求。在早期的OpenOffice.org 1.0.x系列中,要求奔腾级CPU64MB内存、250MB硬盘,安装Windows 95NTLinux kernel 2.2.13及以上OS;在OpenOffice.org 1.1.x系列中,支持Windows 98NTLinux glibc 2.2.0及以上OS,硬件需求不变。

    1. 我该如何使用OpenOffice.org新的安装方式?

OpenOffice.org1.0.x1.1.x系列中在各个系统中都采用的是统一界面的安装方式。这种方式方便了用户在不同平台上安装和使用OpenOffice.org,但是却同各个操作系统的原生安装方式格格不入。为了使OpenOffice.org更加能够融入操作系统,提高其原生软件的性质,在2.0.x系列中会引入新的安装方式,在Windows上为.msiMicrosoft Installer,在Linux上为.rpmRedHat Package Management(将来会增加.debDebian Package Management)。

    1. 作为普通用户,我应该如何为OpenOffice.org安装新字体?

OpenOffice.org支持普通用户权限下的安装方式。在安装之后,用户可能会想加入自己的私用字体。在OpenOffice.org安装软件目录下查找program/spadmin的程序,执行之,会看到配置打印机和字体的窗口。在其中指定该用户可以访问的字体目录,就能够增加字体了。

    1. 作为系统管理员,我该如何为所有网络用户安装OpenOffice.org

OpenOffice.org支持网络方式的安装。其含义是系统管理员将OpenOffice.org安装在每个普通用户都能访问的目录下(可以是网络共享目录),各用户再自己配置其设置。

在老的安装方式下,系统管理员需要执行setup /net或者setup -net,这一过程实际上是建立OpenOffice.org的整个程序目录结构,不创建菜单项和用户配置信息。然后每个想使用OpenOffice.org再在这个建立好的程序目录下执行setup,这一步骤是以“工作站”方式安装OpenOffice.org,创建大约2MB的用户配置信息和程序链接、快捷方式。然后该普通用户就能看到其菜单项,启动并使用OpenOffice.org了。

在新的安装方式下,管理员在安装OpenOffice.org时会看到设置是否为网络安装的GUI窗口,默认方式下是网络安装,即所有用户都可使用的。之后普通用户就不需要再行“工作站”方式的安装了。只是在第一次启动OpenOffice.org时会需要较长的时间,这是因为复制、创建个人配置信息的缘故。

    1. OpenOffice.org怎么不含字体,我该怎么解决这个问题?

因为软件著作权和资金的问题,OpenOffice.org的发布版中几乎不含任何字体。这是因为绝大多数商业字体都是在严格的许可证下发布的,未经允许不得复制。而作为开放源码软件的OpenOffice.org,目前不具有足够的经济实力为几十种语言附带足够多的高质量字体。

解决的方法是,普通用户可以自行以适当地方式将其已经获取的高质量字体,以上述描述的方式安装到OpenOffice.org中,这样就可以识别并使用这些字体了。但是在此过程中可能会产生的侵犯知识产权的风险需要由用户自己承担。

实际上,最理想的方式是由政府、非赢利性机构、或者开源组织购买或者制作足够多的高质量字体,以可以接受的方式发放给普通用户使用,这样才能根本上解决问题。

    1. 如果我不安装Java虚拟机(运行环境)而运行OpenOffice.org,有什么功能会不能使用?

OpenOffice.org的大多数功能不依赖于Java虚拟机(运行环境)就可以运行。但是,所有的XSLT文件过滤器和辅助功能都需要Java虚拟机和某些Java库才可以运行。如果缺乏Java虚拟机(运行环境),OpenOffice.org可能会无法打开某些XML文件格式,辅助功能也会无法使用。

    1. 有没有可以获得的OpenOffice.org相关文档和书籍?

OpenOffice.org的文档相对较多,可以在OpenOffice.org网站、衍生办公软件公司的网站、和各开源软件论坛上找到。也可以通过网络搜索获得。

迄今为止OpenOffice.org的相关书籍已经出版了许多,在各大网上书店都可以找到。但是中文版本的OpenOffice.org书籍还很罕见,市面上可见到的相关书籍只有《StarOffice for Linux实用教程》、《StarOffice 5.2融会贯通》和《StarSuite 6.0使用精解》等StarOffice/StarSuite相关书籍。

更多中文的OpenOffice.org相关书籍,期待OpenOffice.org的用户和志愿者投入力量著作出来。

    1. OpenOffice.org能否打开金山WPS文件?

OpenOffice.org社区同金山公司曾经达成过文件格式兼容的协议,经过双方的合作,OpenOffice.org可以打开金山WPS 2002的文件格式。但是后来金山中止执行了这个合作协议,所以OpenOffice.org并不能打开WPS 2003的文件格式。

    1. OpenOffice.org能保存成LaTeX格式的文件么?

LaTeXTex)格式是在科学界广泛应用的文件格式,经常作为论文著作出版的标准格式。LaTexTex)格式是基于类LISP语言编写的,完全不同于二进制文件格式和后来OpenOffice.org采用的XML文件格式。有一个用Java编写的第三方软件Writer2LaTeX1支持将OpenOffice.org Writer文件转换为LaTeX格式。

    1. 为什么我用OpenOffice.org保存出来的DocBook文件里缺少一些内容?

DocBook是在撰写科技文档领域广泛应用的XML文档格式,它具有独立的DTD并且在不断更新。OpenOffice.org包含了采用XSLT文件过滤器结构实现的DocBook文件支持,在其社区中还有若干种其它的支持DocBook的实现方式。

在通过OpenOffice.org内置的文件过滤器保存DocBook文件时,如果使用了不恰当的样式、或者文件结构不正确,可能会导致无法完全保存信息。这要求用户对DocBook文档格式足够熟悉,能够预先避免可能的信息丢失。

现在OpenOffice.org并不支持内嵌的XML文件树结构。

    1. 为什么我用OpenOffice.orgMicrosoft Office交换文档时总有一点版面差别呢?

Microsoft Office采用的是专有的、不公开的二进制文件格式(.doc.xls.ppt)OpenOffice.org兼容Microsoft Office的文件格式的方式是通过hack其文件格式,不断试错和改进来实现的。所以对于不可能得到全部结构描述的Microsoft Office文件格式来说,从理论上讲,第三方软件几乎不可能完全做到与其兼容。

媒体和某些办公软件商所宣传的“完全兼容”实际上都是无法完成的任务。OpenOffice.org的努力方向是提供给用户更好的兼容性,但是无法保证100%的完全兼容。

    1. OpenOffice.org为什么要用公开的、标准化的文件格式?

从办公软件的发展方向上看,开放、标准化、可扩展的文件格式才是其发展方向。封闭、专有、不可扩展的办公软件文件格式将用户锁定在某一软件商商,使其无法自由地选择,也没有真正拥有自己的文档及其内在数据信息。这样遏制了竞争,也必然会提高用户的使用成本,降低其投资收益。所以长期地,对专有文件格式的兼容并不是OpenOffice.org的主要发展方向。

OpenOffice.org已经将其XML文件格式提交给OASIS Open Office XML格式技术委员会讨论,并以此为蓝本制定OASIS Open Office XML格式标准。预计该标准将于2005年通过。欧盟正在考虑以其为欧盟范围内的办公软件文件格式标准,并且将于2005年提交到ISO组织,成为官方的国际标准。

    1. OpenOffice.org怎么不含电子邮件客户程序和桌面数据库?

OpenOffice.org的前身,StarOffice5.2版本之前曾经包含过电子邮件客户端程序,但是后来在StarOffice 6.0OpenOffice.org中去除了这个应用。现在OpenOffice.org的发展策略是与其它各种电子邮件客户程序,比如Mozilla MailerThunderBirdOutlook等更好地配合。

OpenOffice.org虽然至今都没有包含桌面数据库应用,但是它提供了一个很优秀的数据源访问接口模块,能够很方便地连接各种数据库、地址簿和电子表格。鉴于用户需求,OpenOffice.org社区内部也正在讨论将什么桌面数据库加入到未来的OpenOffice.org中来,它最好是与OpenOffice.org现有许可证兼容的开源软件。

    1. OpenOffice.org中有没有群件应用?

OpenOffice.org社区内部现有一个孵化中的群件(groupware)项目,称为Glow。该应用是用Java编写的,目标是提供与各种群件服务器的完善连接,包括即时通信、邮件、日程、白板等功能。

    1. 我该如何使用OpenOffice.org中的数据库访问功能?

OpenOffice.org的任何应用(文字处理、电子表格、演示文稿、绘图图像)中,按F4键会显示出OpenOffice.org的数据源访问面板,接下来就可以交互式地使用它了。

    1. OpenOffice.org可以加密文档吗?

OpenOffice.org 1.x.x中支持128位密码保护方式的加密文档全文。在OpenOffice.org 2.0中,将会支持符合W3C XML数字签名标准的全文多次签名,在此之后还会支持标准化的全文和片断的多重XML数字签名和加密。

    1. 为什么我在Windows上制作的OpenOffice.org文件拿到Linux上打开后的字体效果有所不同?

对于办公文档来说,其文件内部是不内嵌字体的,只有字体相关的描述性信息。由于不同操作系统上提供着不同的字体,甚至同样字体的描述可能也是不同的,所以在不同类型系统间传递的文档所采用的字体可能就是缺失的。OpenOffice.org为了能够现实出这些缺失字体的文字,就自动采用了某种现有字体,所以可能会有不同的效果。

解决的方法是在不同系统上编写文档采用共有的字体,或者在OpenOffice.org中定义自动的字体映射表。

    1. 我的OpenOffice.org刚装上,怎么看不了中文,而且字体这么难看?

这个问题上面已经提到过,是因为OpenOffice.org由于软件著作权的原因无法自带很多字体,所以软件起初的GUI和文档内部可能自动采用了不恰当的字体,从而无法辨认。

解决的方法是替换默认字体为操作系统内现有的字体,在菜单项“工具-选项-普通-字体”中选择将“Andale Sans UI”替换为任意现有的字体,比如“宋体”或者“仿宋体”。

    1. OpenOffice.org可以兼容Microsoft Office的宏吗?

OpenOffice.org采用了自定义的Basic宏语言,与Microsoft宏略有差别。但是OpenOffice.org提供了独立的迁移工具(Macro Migration Tool)帮助用户从Microsoft Office Macro上迁移到OpenOffice.org Basic上来,该工具可以在OpenOffice.org社区网站上找到。

    1. OpenOffice.org是否具有宏的安全控制机制?

OpenOffice.org Basic宏同样具有安全控制机制,确保其在“沙箱”(sandbox)中安全运行。用户可以给不同作者的宏设置不同的安全级别。

    1. OpenOffice.org可以打开PDF文件么?

PDFPortable Document Format)是Adobe公司发布的广为流传的用于交换的文档格式,它最大的特点是保持原样、易于打印。但是从本质上说,PDF是一种页面描述格式,它内部不含有足够的内容逻辑结构信息,所以同表述内容逻辑的办公软件文档,特别是文字处理文档有着本质的不同。

而且由于PDF是以页面的图形格式描述的,所以它具有较高的精确度,而办公软件文档的页面描述信息是需要排版引擎计算得出的。

根据Adobe PDF文件格式规范中的许可证描述,制作编辑PDF文档的软件可能还有知识产权诉讼的法律风险。

基于以上原因,迄今为止OpenOffice.org还不支持打开PDF文件格式。不过OpenOffice.org社区正在讨论在未来的版本中包含该功能的可行性。

    1. 为什么我打不开密码保护的Microsoft Office文件呢?

密码保护的Microsoft Office文件,通常采用了散列算法、随机数等方法进行加密,而且通常都是由文档的作者执行的。OpenOffice.org作为开放源码的办公软件,也遵循各国的知识产权、隐私权等相关法律法规。所以OpenOffice.org并不提供破解文档保护的功能。

  1. 许可证问题

    1. OpenOffice.org采用的是什么许可证方式发布?

OpenOffice.org软件采用的是双许可证模式发布:GNU组织的《通用公共许可证》GPL2及《次通用公共许可证》LGPL3;或者《Sun工业标准源码许可证》SISSL4。那些不随OpenOffice.org软件一起发布的文档依据《公共文档许可证》PDL5发布。

    1. 我该应用OpenOffice.org的什么许可证?

如果你希望获得OpenOffice.org的源码并免费使用,并不修改其代码、或者打算把修改的任何代码都回馈给OpenOffice.org社区,你可以按GNU《通用公共许可证》GPL许可;

如果你希望基于OpenOffice.org开发自己的软件,但是只通过动态链接库等非直接修改源码的方式关联,并且不希望开放自己的源代码,那么你可以按GNU《次通用公共许可证》LGPL许可;

如果你希望修改OpenOffice.org源代码制作自己的软件,并且不希望开放自己的源码,那么只要你确保不修改OpenOffice.org XML文件格式和API规范,或者会保证把修改XML文件格式和API规范的代码及时地开放给OpenOffice.org社区,那么你可以应用《Sun工业标准源码许可证》SISSL

如果你不能满足上述任何一个条件,那么你使用OpenOffice.org及其源码将存在侵犯OpenOffice.org的作者(Sun公司及其它共同作者)的知识产权的风险。

    1. 我可以合法地将OpenOffice.org的二进制代码用于商业目的么?

当然可以。OpenOffice.org的各种许可证并不限定于用户的使用目的和范围,只要符合任意一种许可证的条件并恰当地根据其发布即可。

    1. Sun工业标准源码许可证》(SISSL)简单地说是什么意思?

SISSLOpenOffice.org社区为了在商业领域中推广使用OpenOffice.org,根据企业用户、独立软件提供商、软件集成商等的需求,特别设计的软件许可证。该许可证要求使用者遵循OpenOffice.org XML文件格式和API规范一致和开放的特点,其目的是在保证OpenOffice.org及其衍生软件在保持兼容性的基础上,给商业伙伴最大程度地定制软件的自由。

Sun工业标准源码许可证》SISSL是经过开源软件促进会(Open Source Initiative)认证的开源软件许可证。

    1. 我想向OpenOffice.org社区贡献代码,为什么要签署《共同版权委托协议》(JCA)?

OpenOffice.org的原始作者、也就是其前身StarOffice的知识产权享有者,是Star Division公司及其继承者Sun微系统公司。Sun公司是OpenOffice.org社区的发起者和主要赞助者和源代码贡献者。OpenOffice.org软件的其它贡献者对他们所贡献的代码享有知识产权。

但是在实际操作中,如果OpenOffice.org的知识产权享有者为数众多且分散、不易联系,那么对于它的广泛传播和使用,和基于它的商业扩展和应用是很不利的。这是因为任何OpenOffice.org的许可证使用者必须逐个征得OpenOffice.org的每个作者的许可才能够进行实际的工作。

为了使这个过程更加简便,促进OpenOffice.org的发展,Sun公司希望每个给OpenOffice.org贡献代码的社区成员--志愿者都能够签署《共同著作权委托协议》(Joint Copyright Assignment),许可Sun公司具有这些社区著作权享有者同样的权利,代表它们在OpenOffice.org的实际运营中行使权利。该协议并不会对独立的OpenOffice.org贡献者有知识产权的损害,只是为了更有效地运营OpenOffice.org社区。

    1. 我已经签署了JCA协议,那么我就拥有了OpenOffice.org的版权了吗?

如果你已经签署了《共同著作权委托协议》(JCA),那么就意味着你同意在OpenOffice.org社区的运营中由Sun具有同你相同的著作权,代表你进行相关活动。

但是这并不代表你就拥有了整个OpenOffice.org的知识产权,只能说你拥有你向OpenOffice.org社区所贡献的源代码的著作权,是OpenOffice.org的共同著作权享有者。

    1. Sun为什么要按照双许可证模式发布OpenOffice.org

上面的问题中已经回答,Sun之所以按照GPL/LGPLSISSL双许可证模式发布OpenOffice.org,是为了促进OpenOffice.org作为开源软件的蓬勃发展,同时避免阻碍其商业应用的策略。

    1. Sun将来可能会封闭已经开源的OpenOffice.org代码吗?

不会。按照OpenOffice.org现行的GPL/LGPLSISSL双许可证模式,Sun和其它社区著作权享有者为OpenOffice.org所贡献的源代码一经开放,就不可收回。社区成员永远可以按照现行的GPL/LGPLSISSL许可证来使用OpenOffice.org的源代码。

即使Sun将来不再为OpenOffice.org社区提供代码,那些已经开放的代码也是不可收回的。况且根据Sun对于OpenOffice.org的愿景,在相当长的时期内是不会发生这样的事情的。

    1. 我想基于OpenOffice.org开发自己的软件,我可以合法地应用什么许可证呢?

如上所述,你可以在GPL/LGPLSISSL之间选择自己认为恰当的许可证。一些第三方的插件还可以应用XBSD等兼容许可证。

    1. 我想为OpenOffice.org提供一些文档,可以应用什么许可证?

如果你想提供的文档将被包含在OpenOffice.org软件中一同发布,将应用GPL/LPGLSISSL许可证;如果你仅仅想提供一些OpenOffice.org相关的独立文档,则可以应用《公共文档许可证》PDL

    1. 基于OpenOffice.org的“自主版权”的办公软件是什么意思?

国内常常有软件商声称基于OpenOffice.org开发出“自主知识产权”、“自主版权”的办公软件。其实这种说法并不准确。

依据如上所述的OpenOffice.org许可证策略,OpenOffice.org是依据GPL/LGPLSISSL许可证发布的。而国内的OpenOffice.org衍生软件商所遵循的都是SISSL许可证。根据《Sun工业标准源码许可证》内容,我们可以得知被许可者有权利修改OpenOffice.org的源代码而不公开这些修改,其条件是不可改动OpenOffice.org XML文件格式和API规范,或者将任何XML文件格式和API规范的相关改动及时地提交给OpenOffice.org社区。

由此看来,根据SISSL许可的OpenOffice.org衍生软件商,只是有条件地获得OpenOffice.org源代码并进行修改。SISSL的被许可者只是有条件地获得了部分修改权、发布权等权利,但是并没有获得让度的OpenOffice.org整体的知识产权(著作权)。它们只有部分自主权,但并非具有完全的知识产权(著作权)。

  1. 社区问题

    1. 我能为OpenOffice.org开源社区做些什么?

OpenOffice.org社区非常欢迎各种形式的贡献。

你可以为OpenOffice.org社区做的包括:编写源代码、绘制图形图像、写作文档、市场推广、测试与质量保证、建设母语的OpenOffice.org、帮助其它OpenOffice.org用户、直接捐助资金等。

    1. OpenOffice.org社区和其它开源社区的合作如何?

由于其天然的同质性,OpenOffice.org社区和世界上其它开源社区具有着密切的联系和合作。OpenOffice.org社区和Debian社区、GNOME社区、KDE社区、Mozilla社区、Apache社区、OpenGroupware社区、Perl/CPAN社区、Python/Zope/Plone社区等都有技术上和其它方面的丰富交流。

    1. OpenOffice.org社区和商业、非商业机构的关系如何?

除了作为发起者和主要资助者的Sun公司,OpenOffice.org社区和其它商业机构,例如NovellSuSE/Ximian)、RedHatSoftware AG等公司,都有密切的联系。

    1. OpenOffice.org社区的组织形式和运作机制是怎样的?

OpenOffice.org社区由社区理事会进行日常管理,理事会成员由全体社区成员从各类项目中选举产生。理事会定期召开会议,指导社区中项目的发展方向,协调冲突,但是并不具有绝对的权力。OpenOffice.org社区内部的项目具有相对自治的权利,它们通过选举来决定项目领导和发展方向。

    1. 我想建立一个OpenOffice.org的镜像网站,该怎样操作?

OpenOffice.org现在支持二进制和源码包的镜像,以及源码CVS服务器的镜像功能。如果需要讨论建立OpenOffice.org的镜像网站,请访问镜像项目(http://distribution.openoffice.org/mirrors/index.html)。

    1. 大中华地区有什么机构提供OpenOffice.org的服务?

由于OpenOffice.org是开源软件,所以理论上没有机构需要对其产生的意外损害负责,所有的支持需要用户去OpenOffice.org社区获得。但是Sun公司最近为OpenOffice.org提供了付费支持。

大中华地区实际上也没有商业机构提供对OpenOffice.org的支持,用户可以到各地的开源软件社区中寻求帮助。OpenOffice.org在中文地区的各衍生软件商提供的论坛也是获得支持的一个选择。

    1. SunOpenOffice.org社区的发起者和主要资助者,其它非盈利机构和商业组织能够在其中发挥什么作用?

作为OpenOffice.org社区的发起者和主要资助者,Sun希望OpenOffice.org能够获得巨大的成功。其它非盈利机构和商业组织在OpenOffice.org社区里同样也可以发挥重要的作用。比如863项目中的基于OpenOffice.org的少数民族语言办公软件,台湾地区的教育和研究机构资助成立了当地的OpenOffice.org用户组,印度信息技术中心资助深化OpenOffice.org对印度北方方言的本地化支持。商业机构还可以将OpenOffice.org包装、集成进自己的产品和解决方案,正如NovellIBMRedHat、和国内很多的OpenOffice.org衍生软件商所做的那样。

    1. 我该怎么向OpenOffice.org开源社区提交问题?

首先你需要注册一个OpenOffice.org社区的用户,正式成为其成员。然后浏览社区内部丰富的资料,选择感兴趣的项目,加入其中、以及相关的邮件列表。向OpenOffice.org社区提交问题,可以通过电子邮件列表,也可以直接在其问题追踪工具IssueZilla上提交。

你需要积极地参与讨论才有可能迅速地解决问题。

  1. 开发问题

    1. 怎样编译OpenOffice.org

完全编译OpenOffice.org是一个相当复杂的过程,在不同的平台上的过程各有不同。详细的步骤你可以参考http://tools.openoffice.org/中对编译环境的详细介绍。

    1. 完全编译OpenOffice.org需要多少磁盘空间,花多长时间?

这一过程根据系统的硬件和软件环境不同千差万别。典型的编译时间大约是10个小时。运用适当的工具并行编译或分布式编译OpenOffice.org,能够大大缩短编译时间。

    1. OpenOffice.org的开发过程是如何的?

这是个相当复杂的问题。同其它大型软件类似,OpenOffice.org也具有需求、定义、设计、实现、测试(质量保证)、发布、维护等若干过程。由于OpenOffice.org也是一款优秀的开源软件,所以它还具有优秀开源软件项目所共有的若干特性。具体的信息需要深入理解OpenOffice.org整个软件流程。

    1. OpenOffice.org包含多少个项目,有多少源代码?

OpenOffice.org现在包括的项目超过70个,源代码已经超过了900万行。

    1. 我该如何得到OpenOffice.org的源代码?

你可以通过OpenOffice.org下载中心(http://download.openoffice.org/)获得OpenOffice.org最新稳定版本的源代码,也可以通过其CVS服务器获取开发版本的源代码。

    1. OpenOffice.org是用什么语言编写的?它依赖于Java吗?

OpenOffice.org的绝大多数程序是用C/C++语言编写而成,有少量程序用Java编写。但是OpenOffice.org不依赖于Java虚拟机(运行环境)就可以运行,只是部分相关功能将会无法使用。

    1. OpenOffice.org的跨平台功能是怎么实现的?在Linux系统上它依赖于GNOMEKDE吗?

OpenOffice.org是通过分层设计,将平台相关代码和无关代码分离开来的模块化结构来实现跨平台运行的。在LinuxUNIX系统上它的图形库依赖的是X11库,不依赖于GNOMEKDE桌面环境。

最近OpenOffice.org为了提高同各桌面环境的兼容性,正在开发KDE等桌面的GUI插件库,由此OpenOffice.org将会看起来更像是该桌面环境下的本地程序。

    1. 什么是OpenOffice.org IssueZilla

OpenOffice.orgIssueZilla是由BugZilla修改而来,它是OpenOffice.org追踪问题的主要工具。

    1. 我能在哪儿得到帮助?

OpenOffice.org的网站上,通过邮件列表、IRCIssueZillaBlog、规范等等各种方式,你可以得到最丰富的OpenOffice.org的相关资源。当然在国内也有一些OpenOffice.org的中文的讨论社区,你可以通过网络搜索获得。

  1. 商业问题

    1. 免费地应用OpenOffice.org于商业用途真的是合法的吗?

如上所述,只要你按照OpenOffice.org所允许的许可证方式使用OpenOffice.org就是合法的。该许可证并不规定OpenOffice.org的使用领域和目的。

    1. OpenOffice.org能够给我提供怎样的价值?

OpenOffice.org是世界范围内领先的开放源码的办公软件,它具有跨平台、开放、全功能、可扩展、标准化、高可用性等优点。OpenOffice.org能够降低企业、政府、和非盈利机构的软件成本,提高投资收益,使用户真正拥有他们的文档数据,避免垄断,促进竞争。

    1. Sun为什么要资助OpenOffice.org开源项目?谁将从中受益?

成立并资助OpenOffice.org社区,符合Sun公司的愿景:即实现“网络就是计算机”的梦想,降低用户使用计算机和网络资源的成本,提高社会的信息化水平。在这一过程中,无论是作为发起者的Sun公司,还是OpenOffice.org社区的参与者,亦或是OpenOffice.org的用户和推广者都会从中受益。

    1. OpenOffice.orgLinux桌面的意义是什么?

在当前的后互联网时代,对于计算机的普通用户来说,具有文字处理、电子表格、演示文稿、数据图表、公式编辑、简单绘图和图片处理等功能的办公软件已经成为一种“生产力软件”,也就是能够大幅提高生产力的基础软件。但是占据绝大多数市场份额的办公软件却一直是价格昂贵的专有软件,其中的大部分功能个人用户很少用到。对消费者来说,它逐渐地已经成为一种奢侈品,然而现在的大部分用户因为专有文件格式被锁定在其上,不得不继续使用其升级产品。广大用户希望能够出现一种替代昂贵专有办公软件的廉价、稳定、具有足够功能并且可用的办公软件。

Linux桌面系统为了获得更广泛的应用,必须具有足够可用的办公软件。作为领先的开源办公软件,OpenOffice.org在此Linux桌面系统推广的过程中无疑具有举足轻重的影响。

    1. OpenOffice.org对中文计算机用户的意义是什么?

中文是东亚文字的来源,中文计算机用户也是数量庞大的群体。但是中文计算机用户普遍的购买力不足以承受高昂的专有办公软件,否则将会面临侵犯知识产权的风险。因为具有足够可用的、廉价的、稳定的办公软件是中文计算机用户的迫切需求。

OpenOffice.org具有良好的国际化技术架构,是中文计算机用户办公软件的一个相当不错的选择。但是由于资源的限制,迄今为止OpenOffice.org中文化的程度仍然是差强人意,而以中文为母语的志愿者由于语言的限制加入OpenOffice.org社区也是人数寥寥。

OpenOffice.org社区热切希望有更多的中文用户和组织加入到OpenOffice.org社区的建设中来,只有通过积极的交流和协作,才能高效地提高OpenOffice.org的中文化质量,服务于中文计算机用户。

    1. OpenOffice.org有那些商业解决方案和成功案例可以参考?

基于OpenOffice.org的商业解决方案和成功案例,包括内容/文档管理系统、电子出版、办公自动化、论文数据库、电子表单系统等等。如果需要详细的信息,你可以参考http://marketing.openoffice.orghttp://bizdev.openoffice.org

    1. 我可以怎样通过OpenOffice.org合法地获利?

遵守OpenOffice.org的相关许可证,作OpenOffice.orgOEM、独立软件商、系统集成、或者发布其衍生办公软件,为用户提供解决方案和咨询服务,都可以获利。



如果你想更多了解OpenOffice.org,请参考:OpenOffice.org社区及其提供的FAQ6Sun公司提供的StarOffice Office Suite相关FAQ7OpenOffice.org相关FAQ8



本文依据《创作共用约定》之“署名-禁止派生-非商业用途”方式发布,即你可以免费拷贝、分发、呈现和表演当前作品,但是必须基于以下条款:

  • 署名:你必须明确标明作者的名字。

  • 非商业用途:你不可将当前作品用于商业目的。

  • 禁止派生:你不可更改、转变或者基于此作品重新构造为新作品。

对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款。

在得到作者的明确允许下,这里的某些条款可以放弃。

此约定是法律文本(完整的协议)9的简单易读概要。

1Writer2LaTeXhttp://www.hj-gym.dk/~hj/writer2latex/

2GNU GPLhttp://www.openoffice.org/licenses/gpl_license.html

3GNU LGPLhttp://www.openoffice.org/licenses/lgpl_license.html

4SISSLhttp://www.openoffice.org/licenses/sissl_license.html

5PDLhttp://www.openoffice.org/licenses/PDL.html

6OpenOffice.org社区提供的FAQhttp://www.openoffice.org/faq.html

7Sun提供的StarOffice Office Suite相关FAQhttp://wwws.sun.com/software/star/staroffice/faq.html

8Sun提供的OpenOffice.org相关FAQhttp://wwws.sun.com/software/star/openoffice/faq.html

9创作共用协议的完整法律文本,http://www.creativecommons.cn/licenses/by-nd-nc/1.0/legalcode

如果想用openoffice打开word文档后再添加背景色或者背景图片的话,按下面的操作好了。

format菜单->page

下面你就尽情发挥吧;

其实只要你愿意,excel也可以添加背景色或者背景图片的,只不过你试下就知道了,添加后你在excel中并不能看到效果,但转成的pdf却是有你想要的效果的,有兴趣的话就赶紧试下吧。

很多朋友了看了这篇文章一定会说,这有什么特别呢,很多虚拟打印机都可以做到的呀;

但是如果你做过,你也许就会发现很多excel转成pdf后是面目全非,惨不忍睹,这样的效果你还转它做什么呢?

但有时有确实需要转换,怎么办呢?

那就试下openoffice吧,相信不会令你失望的。

希望有这方面信息或者愿意提供帮助的朋友和我联系,谢谢了,在下主要想做些iTextSharp方面的测试。

是根据java下的HSQL(HypersonicSQL) 数据库引擎用C#重写的,支持 framework1.1和Compact Framework 1.0,并提供了ADO.NET data provider。

熟悉java的人大多应该知道hsql((确切说应该叫HSQLDB,因为HSQLDB是在一个已经终止的开源项目HSQL上重新发展起来的)了,openoffice的2.0版本就集成HSQL做为其数据库产品,正好对应的是MS Office的Access,很多开源项目都用它作为演示数据库(比如JBoss)。

关于HSQLDB的中文介绍,这里从别处顺便摘抄一点过来:

超音速 SQL 数据库后来正式更名为 HSQLDB,它是一类纯 Java 撰写的嵌入式关系数据库服务器,您可以在单机模式(使用直接文件访问)或客户机/服务器模式中使用它,它支持大量的并发用户。尽管不如 DB2 功能强大,也不如 MySQL 流行,但 HSQLDB(超音速SQL数据库)可以满足很大范围内 Java 应用程序的需要,因为它具有可扩展性,而且对内存/处理器的要求不高。

HSQLDB 是一类使用方便的 Java 开发数据库,因为它支持 Structured Query Language(SQL)的丰富子集,并且 Java 程序员根本不需要在他们的开发工作站上安装严重消耗处理器、内存和磁盘空间的数据库服务器。

SharpHSQL分PC和pocketPC两个系列。

目前最新版本是1.0.3.0

具体可以到其官方网站下载

http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=ea06f702-480a-4b60-8402-70b27c6472dd

国内也有款和HSQLDB功能非常类似的数据库系统,号称是拥有自主知识产权,纯java开发,体积最小的数据库,并进行了版权登记,名字叫HYSQL,有兴趣的看看吧。