hi, all. i found your email addresses on the wiki of openoffice documentation project, and now trying to get some help from you guys. i work for a mailing service provider, and right now i'm making a format converting tool, which can convert pdf doc[x] ppt[x] xls[x] to html, so that attachments in those formats could be viewed online, regardless of the user's envirenment. i can convert doc[x] and xls[x] to html now, but found some trouble with the ppt[x] and pdf. my code is like the following(based on the code found on the wiki and sdk examples). when converting ppt and pdf, there is always an error, but get no message information. the output would be like:
[root@M5 CppBinding]# make clean; make ; make office_connect.run
cd /root/unoout/openoffice.org3.1_sdk/LINUXexample.out/bin && office_connect
Connected sucessfully to the office
XComponentloader successfully instanciated
xcomponent load ok
XStorable successfully instanciated
start to save file
readonly:0
haslocation:1
found a error
An error occurred:
make: *** [office_connect.run] Error 1
questions:
1.is this caused by chosing the wrong export filter type?
2.what filter type should i use to export html from ppt[x] and pdf?
3.no import filter type is specified, but it worked with doc[x] and xls[x], is
this ok? should i specify one anyway?
4.and how can i make sure the file is of doc format? eg i change whatever a
file's name into *.doc on purpose and use this tool to convert it to html, this
surely will cause some problem, right? can i determine whether the file to be
imported is of the specified format or what format is the file to be imported
is of? how could i do this?
i know i asked a lot of questions, this might take you some time to answer,
i'm very sorry to bother you guys, but i can not find another way to solve this
problem. best wishes for you all, looking forward to your replies or please
forward this mail to someone who can help. PLEASE, SO MANY THANKS.
Jack from CHINA.
INFO:
my code is based on sdk examples in the dir of
openoffice.org/basis3.1/sdk/examples/DevelopersGuide/ProfUNO/CppBinding
[root@M5 sdk]# ./setsdkenv_unix
************************************************************************
*
* SDK environment is prepared for Linux
*
* SDK = /usr/lib64/openoffice.org/basis3.1/sdk
* Office = /usr/lib64/openoffice.org3
* Office Base = /usr/lib64/openoffice.org/basis3.1
* URE = /usr/lib64/openoffice.org/ure
* Make = /usr/bin
* Zip = /usr/bin
* C++ Compiler = /usr/bin
* Java = /usr/local/jdk1.6.0_18/
* SDK Output directory = /root/unoout/openoffice.org3.1_sdk
* Auto deployment = YES
*
************************************************************************
============code start=========================
#include <stdio.h>
#include <cppuhelper/bootstrap.hxx>
#include <com/sun/star/bridge/XUnoUrlResolver.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
#include <com/sun/star/frame/XComponentLoader.hpp>
#include <com/sun/star/frame/XDesktop.hpp>
#include <com/sun/star/frame/XStorable.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
using namespace std;
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::bridge;
using namespace com::sun::star::io;
using namespace com::sun::star::beans;
using namespace com::sun::star::frame;
using namespace rtl;
using namespace cppu;
Reference< XMultiServiceFactory > ooConnect(){
// create the initial component context
Reference< XComponentContext > rComponentContext =
defaultBootstrap_InitialComponentContext();
// retrieve the servicemanager from the context
Reference< XMultiComponentFactory > rServiceManager =
rComponentContext->getServiceManager();
// instantiate a sample service with the servicemanager.
Reference< XInterface > rInstance =
rServiceManager->createInstanceWithContext(
OUString::createFromAscii("com.sun.star.bridge.UnoUrlResolver"
),rComponentContext );
// Query for the XUnoUrlResolver interface
Reference< XUnoUrlResolver > rResolver( rInstance, UNO_QUERY );
if( ! rResolver.is() ){
printf( "Error: Couldn't instantiate com.sun.star.bridge.UnoUrlResolver
service\n" );
return NULL;
}
try {
// resolve the uno-url
rInstance = rResolver->resolve( OUString::createFromAscii(
"uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager" )
);
if( ! rInstance.is() ){
printf( "StarOffice.ServiceManager is not exported from remote
counterpart\n" );
return NULL;
}
// query for the simpler XMultiServiceFactory interface, sufficient for
scripting
Reference< XMultiServiceFactory > rOfficeServiceManager (rInstance,
UNO_QUERY);
if( ! rOfficeServiceManager.is() ){
printf( "XMultiServiceFactory interface is not exported for
StarOffice.ServiceManager\n" );
return NULL;
}
return rOfficeServiceManager;
}
catch( Exception &e ){
OString o = OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US );
printf( "Error: %s\n", o.pData->buffer );
return NULL;
}
return NULL;
}
int main( ) {
//retrieve an instance of the remote service manager
Reference< XMultiServiceFactory > rOfficeServiceManager;
rOfficeServiceManager = ooConnect();
if( rOfficeServiceManager.is() ){
printf( "Connected sucessfully to the office\n" );
}
//get the desktop service using createInstance returns an XInterface type
Reference< XInterface > Desktop = rOfficeServiceManager->createInstance(
OUString::createFromAscii( "com.sun.star.frame.Desktop" ));
//query for the XComponentLoader interface
Reference< XComponentLoader > rComponentLoader (Desktop, UNO_QUERY);
if( rComponentLoader.is() ){
printf( "XComponentloader successfully instanciated\n" );
}
//get an instance of the spreadsheet
Sequence < ::com::sun::star::beans::PropertyValue > pvin(1);
pvin[0].Name =OUString::createFromAscii("FilterName");
pvin[0].Value = Any(OUString::createFromAscii("MS PowerPoint 97"));
Reference< XComponent > xcomponent = rComponentLoader->loadComponentFromURL(
OUString::createFromAscii("file:///home/smoutou/ppt.ppt"),
// OUString::createFromAscii("file:///home/smoutou/ta.html"),
// OUString::createFromAscii("file:///home/smoutou/bak.doc"),
// OUString::createFromAscii("file:///home/smoutou/cpp.pdf"),
OUString::createFromAscii("_default"),
0,
pvin);
// Sequence < ::com::sun::star::beans::PropertyValue >());
if(!xcomponent.is())
printf("xcomponent bad");
else
printf("xcomponent load ok\n");
Reference< XStorable > rcomponentStore (xcomponent, UNO_QUERY);
if( !rcomponentStore.is() ){
printf( "XStorable Not successfully instanciated\n" );
}else{
printf( "XStorable successfully instanciated\n" );
printf("start to save file\n");
printf("readonly:%d\n", rcomponentStore->isReadonly());
printf("haslocation:%d\n", rcomponentStore->hasLocation());
try{
Sequence < ::com::sun::star::beans::PropertyValue > pv(1);
pv[0].Name =OUString::createFromAscii("FilterName");
pv[0].Value = Any(OUString::createFromAscii("HTML (Impress)"));
rcomponentStore->storeAsURL(OUString::createFromAscii("file:///home/smoutou/ppt.ppt.html"),
//rcomponentStore->storeToURL(OUString::createFromAscii("file:///home/smoutou/ppt.ppt.html"),
pv);
//Sequence < ::com::sun::star::beans::PropertyValue >());
}
catch(Exception e)
{
printf("found a error\n");
OString o = OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US );
printf( "An error occurred: %s\n", o.pData->buffer );
xcomponent->dispose();
return 1;
}
}
xcomponent->dispose();
return 0;
}
============code end=========================
2011-06-23
王磊 / Lei Wang完美世界(北京)网络技术有限公司
Beijing Perfect World Network Technology Co., Ltd.
地址:北京市朝阳区北苑路86号院 306号楼(100101)
Addr:Building 306, #86 Beiyuan Road, Chaoyang District, Beijing 100101, China
信息部 / 邮件开发工程师
电话:(8610)58858555-1000 手机:15810028663
传真:(8610)58858555
邮箱:[email protected]
www.wanmei.comCopyright@ 2004-2009 Perfect World Co.,Ltd.All rights reserved.
office_connect.cxx
Description: Binary data
Makefile
Description: Binary data
