1

我尝试使用 OpenOffice 将 odt 文件转换为 doc 文件。安装的版本是 3.1.1,目前无法更改。Perl 版本是 5.18。

Perl 模块OpenOffice::UNO用于此转换。不幸的是,在较新版本的 OpenOffice/LibreOffice 中不再支持 Perl。

该脚本使用 xvfb 无头调用 OpenOffice。

这是使用的代码:

 `# Launch OpenOffice.org as a server
$ ooffice \
"-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"

use OpenOffice::UNO;

# connect to the OpenOffice.org server
$uno = OpenOffice::UNO->new;
$cxt = $uno->createInitialComponentContext('file:///.../path/perluno');
$sm  = $cxt->getServiceManager;
$resolver = $sm->createInstanceWithContext
              ("com.sun.star.bridge.UnoUrlResolver", $cxt);
$rsm = $resolver->resolve
  ("uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager");

# get an instance of the Desktop service
$rc = $rsm->getPropertyValue("DefaultContext");
$desktop = $rsm->createInstanceWithContext("com.sun.star.frame.Desktop", $rc);
.....`

在创建 $desktop 的最后一行中,我收到以下错误消息:

terminate called after throwing an instance of 'com::sun::star::container::NoSuchElementException'

有没有办法解决这个问题?试图了解 UNO 接口的代码,尤其是 UNO.xs,但没有任何关于调用“createInstanceWithContext”的信息。

浏览 OpenOffice 文档也没有提供任何关于此的信息。

它还有助于获取完整的 java 错误消息,以确保缺少什么元素。

文件“perluno”具有以下内容:

[Bootstrap]
UNO_TYPES=/usr/lib64/openoffice.org//program/types.rdb
UNO_SERVICES=/usr/lib64/openoffice.org//program/services.rdb
4

0 回答 0