我尝试使用 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