扩展 OpenOffice.org

作者:Dmitri Popov

如果您有一个漂亮的宏或一个不错的 Writer 模板想要与其他 OpenOffice.org 用户分享,那么将它们发布到网上并附上详细的安装说明可能不是最好的方法。幸运的是,OpenOffice.org 支持扩展——提供附加功能的小型可安装软件包。您可以轻松地将您的模板、自动图文集条目、图库艺术作品和宏转换为只需点击几下即可安装的扩展。更棒的是,OpenOffice.org 的扩展具有易于理解且定义明确的架构,您可以立即开始构建自己的扩展。

使用扩展来扩展 OpenOffice.org 的功能并不是什么新鲜事。从一开始,用户就可以通过安装所谓的 UNO 包来为办公套件添加新功能。通常,这些软件包包含 OOo Basic 代码,它们提供了一种更直接的方式将宏集成到 OpenOffice.org 应用程序中。随着 OpenOffice.org 2.0.4 的发布,通过可安装软件包添加新功能的想法得到了彻底的重新思考,并与最终用户更熟悉的概念——即 Mozilla Firefox 浏览器的扩展架构保持一致。

OpenOffice.org 中扩展系统的技术实现也得到了改进。最值得注意的是,新版本的 OpenOffice.org 可以处理所谓的非代码扩展,这些扩展可以包含文档模板、图库项目、自动图文集片段等等。新版本的 OpenOffice.org 还引入了新的 .oxt 文件扩展名,使用户可以轻松识别可安装的扩展包。

扩展如何工作

OpenOffice.org 扩展本质上是一个 zip 文件,其中包含可安装的内容以及正确安装和注册扩展所需的其他元数据。OpenOffice.org 提供了一个易于使用的工具,称为包管理器,用户可以使用它来安装新扩展并管理现有扩展。要安装扩展,只需选择工具→包管理器,选择我的包,然后按添加按钮。安装扩展后,重新启动 OpenOffice.org,就可以使用了。与 Firefox 不同,某些类型的扩展不需要您重新启动 OpenOffice.org。例如,如果您安装非代码扩展,您可以立即使用它们。

Extend OpenOffice.org

图 1. 非代码 OpenOffice.org 扩展的内容

为了更好地理解 OpenOffice.org 扩展的结构,让我们解剖一个来自 OpenOffice.org Wiki 的空示例扩展 (wiki.services.openoffice.org/wiki/Non-code_extensions)。为了窥探包内部,您必须将其扩展名从 oxt 更改为 zip。这允许您将该包视为常规 zip 存档。该包由三个元素组成:META-INF 和 template 文件夹,以及 Paths.xcu 配置文件。META-INF 文件夹包含 manifest.xml 文件,该文件除其他外,“指向” Paths.xcu 配置文件。Paths.xcu 文件包含包管理器用于将模板添加到适当位置的信息。此位置定义为 %origin%/template,包管理器将 %origin% 变量替换为内部模板容器的完整路径。fuse 参数将模板添加到指定的容器,如果容器不存在,则创建一个新容器。要创建新的模板扩展,您无需进行任何调整;配置文件和扩展的整体结构保持不变。您只需将您的自定义模板复制到 template 文件夹中即可。将结果包的文件扩展名更改回 oxt,然后通过工具→包管理器安装它。要检查扩展是否已正确安装,请选择文件→模板→组织;您应该在我的模板文件夹中看到您的模板。

从头开始创建程序化扩展

虽然创建非代码扩展相当简单,但构建包含代码的包(我们称之为程序化扩展)则另当别论。程序化扩展不仅包括代码本身,还包括更复杂的配置文件,其中包含有关菜单、子菜单、命令以及分配给它们的宏、图标等信息。即使是最简单的程序化扩展,手动创建配置文件也需要一些技术知识,并且可能非常耗时。幸运的是,有一个工具可以自动化创建扩展的整个过程。虽然 Add-on Tool (documentation.openoffice.org/HOW_TO/various_topics/Addons1_1en.sxw) 自 2003 年以来就没有更新过,但它仍然在生成可与最新版本的 OpenOffice.org 一起使用的扩展方面做得很好。为了掌握 Add-on Tool 并更好地理解创建程序化扩展的过程,让我们从头开始构建一个简单的虚拟文本生成器扩展。安装后,该扩展会将 Lorem ipsum 命令添加到工具→附加组件菜单中。此命令运行一个 OpenOffice.org Basic 宏,该宏插入指定数量的段落,其中包含 Lorem ipsum 虚拟文本。以下描述假设您对如何在 OpenOffice.org 中创建和管理宏、模块和库有一般的了解。Add-on Tool 使用了较旧的术语“add-on”,您可以将其视为“扩展”的同义词。

首先创建一个生成虚拟文本的宏。为了保持整洁,创建一个名为 LoremipsumLib 的单独库,其中包含 LoremipsumModule。在此模块中,添加清单 1 中显示的宏。(将“Lorem ipsum dolor sit amet...”字符串替换为虚拟文本段落。)

清单 1. loremipsummacro.txt

Option Explicit
Sub LoremipsumMacro()
Dim ThisDoc As Object
Dim Cursor As Object
Dim ParNumber As Integer
Dim InputMsg As String, InputTitle As String, InputReturn As String
ThisDoc=ThisComponent
InputMsg="Number of paragraphs"
InputTitle="Lorem Ipsum Generator"
InputReturn=InputBox (InputMsg, InputTitle)
ParNumber=InputReturn
Do While ParNumber>0
Cursor=ThisDoc.text.createTextCursor
Cursor.String="Lorem ipsum dolor sit amet..." & Chr(13)& Chr(13)
ParNumber=ParNumber-1
Loop
End Sub

在启动 Add-on Tool 之前,您需要做一些准备工作。首先,为您的所有工作文件创建一个单独的文件夹(例如,loremipsum)。如果您想向菜单项添加图标,请确保您拥有必要的图形文件。根据官方文档,您需要一组小的 (16x16) 和大的 (26x26) BMP 格式图标。但是,您也可以使用 PNG 格式的 16x16 图标(您可以在 www.famfamfam.com/lab/icons/silk 找到一些高质量的图标)。接下来,将整个 LoremipsumLib 库复制到 loremipsum 文件夹中。为此,导航到您主目录中的 .OpenOffice.org2/user/basic,并将 LoremipsumLib 复制到 loremipsum 文件夹中。最后,将图标复制到 LoremipsumLib 文件夹中。现在,打开 Add-on Tool 文档,并确保宏执行已启用。滚动到创建配置文件章节,然后按创建 XML 文件按钮以启动 Addon Creator。

Extend OpenOffice.org

图 2. 使用 Addon Creator 创建程序化扩展

使用 Addon Creator 创建扩展的过程大致可以分为三个阶段。首先,您定义常规设置,包括顶级菜单及其位置。然后,您指定菜单项,最后,您压缩创建的包。

在基本信息窗口中,指定主脚本文件的路径。按浏览按钮,然后选择 LoremipsumLib 文件夹内的 script.xlb 文件。您还必须在插件的唯一名称字段中为您的扩展指定一个名称。只需将 org.openoffice.Office.addon.example 字符串中的示例部分替换为您想要的名称(例如,org.openoffice.Office.addon.Loremipsum)。按下一步选择在哪里添加顶级扩展菜单。您有两个选择:您可以将菜单项添加到主菜单或工具菜单下。根据经验,如果您有一个只包含几个命令的简单扩展,请将其放在工具菜单下。更复杂的扩展应该在主菜单中拥有自己的条目。由于 Lorem ipsum 生成器只包含一个命令,因此将其安装在工具菜单下是有意义的。接下来,输入菜单标题,然后按添加此文本按钮。如果您想仅在特定语言或国家/地区提供您的扩展,您可以通过在语言限制部分中指定适当的设置来实现。当您对设置感到满意时,按完成。

下一步是将 LoremipsumMacro 链接到创建的菜单项。为此,您必须指定库、模块和宏本身。在我们的例子中,它们分别是 LoremipsumLib、LoremipsumModule 和 LoremipsumMacro。将宏链接到命令后,您可以向其添加图标。由于我们选择使用 PNG 格式的图标,请按其他图像类型按钮,从图标定义下拉列表中选择 16x16 正常对比度项,使用浏览按钮选择图标,然后按确定添加它。添加图标时,您有两种选择:您可以链接到将作为图像文件添加到扩展中的图标,也可以将其集成到配置文件中(这仅适用于 BMP 格式的图标)。您选择哪个选项或多或少是品味问题,但链接到图标而不是嵌入图标会生成更简洁且更易于读取的配置文件。如果您以后需要手动编辑该文件,这将非常方便。使用完成按钮完成扩展,然后按插件压缩按钮将其打包。现在,您可以通过选择工具→包管理器来安装创建的扩展。重新启动 OpenOffice.org,您应该会在工具→附加组件菜单中看到 Lorem ipsum 命令。

Extend OpenOffice.org

图 3. Lorem Ipsum 生成器扩展的运行效果

调整扩展

Addon Creator 方便地隐藏了该过程的技术部分,如果您不想花时间手动完成繁琐的工作,这很好。但是,如果您想更好地了解扩展的工作原理,那么它的用处就小了——不仅是为了满足您的好奇心,而且还为了能够排除扩展故障并在不每次都运行 Addon Creator 的情况下对其进行调整。

如果您查看 zip 包内部,您会注意到它包含熟悉的 META-INF 文件夹、包含宏文件的文件夹和 addon.xcu 文件(清单 2)。后者是扩展的关键元素,因为它包含所有配置数据。addon.xcu 基于 XML,即使您只掌握 XML 的基本知识,您也可以通过查看其内容轻松了解其工作原理。

清单 2. addonxcu.txt

<?xml version='1.0' encoding='UTF-8'?>
<oor:node 
 oor:name="Addons"
oor:package="org.openoffice.Office">
  <node oor:name="AddonUI">
    <node oor:name="AddonMenu">
      <node oor:name="org.openoffice.Office.addon.Loremipsum"
oor:op="replace">
        <prop oor:name="Context" oor:type="xs:string">
          <value/>
        </prop>
        <prop oor:name="Title" oor:type="xs:string">
          <value>Lorem ipsum</value>
        </prop>
        <prop oor:name="URL" oor:type="xs:string">
 <value>macro:///LoremipsumLib.LoremipsumModule.LoremipsumMacro
 </value>
        </prop>
        <prop oor:name="Target" oor:type="xs:string">
          <value>_self</value>
        </prop>
        <prop oor:name="ImageIdentifier" oor:type="xs:string">
          <value/>
        </prop>
      </node>
    </node>
    <node oor:name="Images">
      <node oor:name="org.openoffice.Office.addon.Loremipsum.img01"
oor:op="replace">
        <prop oor:name="URL" oor:type="xs:string">
 <value>macro:///LoremipsumLib.LoremipsumModule.LoremipsumMacro
 </value>
        </prop>
        <node oor:name="UserDefinedImages">
          <prop oor:name="ImageSmallURL">
            <value>%origin%/LoremipsumLib/Icon.png</value>
          </prop>
        </node>
      </node>
    </node>
  </node>
</oor:node>

XML 文件包含许多节点,每个节点都有属性,而属性又具有值。例如,顶层节点 <node oor:name="AddonMenu"> 具有多个属性,例如 <prop oor:name="Title" oor:type="xs:string">,它们的值包含扩展的菜单标题 <value>Lorem ipsum</value>。<prop oor:name="URL" oor:type="xs:string"> 属性具有 <value>macro:///LoremipsumLib.LoremipsumModule.LoremipsumMacro</value> 值,其中包含指向相应宏的链接。了解这一点后,您可以通过调整其 addon.xcu 文件来修改扩展。例如,如果您想更改菜单标题,您可以简单地按如下方式编辑 <value>Lorem ipsum</value> 值

<prop oor:name="Title" oor:type="xs:string">
  <value>Insert dummy text</value>
</prop>

在更复杂的宏中,您甚至可以通过克隆和修改配置文件的部分内容来添加新的菜单和命令。

结束语

现在您已经了解了基础知识,您可以开始构建自己的 OpenOffice.org 扩展。如果您想与其他用户分享您的作品,您可以将它们添加到官方扩展存储库 (wiki.services.openoffice.org/wiki/Extensions_repository)。那里的大多数扩展都根据 GPL 许可发布,因此您可以拆解它们以了解它们的工作原理并获得新的想法。

Dmitri Popov 是一位自由撰稿人,他的文章曾发表在俄罗斯、英国和丹麦的计算机杂志上。他的文章涵盖开源软件、Linux、Web 应用程序和其他计算机相关主题。

加载 Disqus 评论