我尝试使用OpenOffice将odt-Files转换为doc-Files。已安装的版本为3.1.1,目前无法更改。 Perl版本是5.18。
Perl-module 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