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 邮箱:wanglei100...@wanmei.com www.wanmei.comCopyright@ 2004-2009 Perfect World Co.,Ltd.All rights reserved.
office_connect.cxx
Description: Binary data
Makefile
Description: Binary data