import java.awt.Event; //import sun.text.Normalizer; import com.enterprisedt.net.ftp.FTPClient; import com.enterprisedt.net.ftp.FTPConnectMode; import com.enterprisedt.net.ftp.FTPTransferType; import com.sun.star.beans.PropertyValue; import com.sun.star.beans.XPropertySet; import com.sun.star.bridge.XBridge; import com.sun.star.bridge.XBridgeFactory; import com.sun.star.connection.NoConnectException; import com.sun.star.connection.XConnection; import com.sun.star.connection.XConnector; import com.sun.star.container.XNamed; import com.sun.star.document.XExporter; import com.sun.star.document.XFilter; import com.sun.star.drawing.XDrawPage; import com.sun.star.drawing.XDrawPages; import com.sun.star.drawing.XDrawPagesSupplier; import com.sun.star.frame.XComponentLoader; import com.sun.star.lang.XComponent; import com.sun.star.lang.XMultiComponentFactory; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; /** * The class DocumentConverter allows you to convert all * documents in a given directory and in its subdirectories to a given type. A * converted document will be created in the same directory as the origin * document. * */ public class DocumentConverter { /** * Containing the loaded documents */ static XComponentLoader xcomponentloader = null; /** * Connecting to the office with the component UnoUrlResolver and calling * the static method traverse * * @param args * The array of the type String contains the directory, in which * all files should be converted, the favoured converting type * and the wanted extension */ public static void main(String args[]) { String cnx, ftpuser, host, port, url, ftpPasswd, destinationFolder, remoteFolderFullPath, remoteFolder; int width, height; try { host = args[0]; port = args[1]; url = args[2]; destinationFolder = args[3]; width = Integer.parseInt(args[4]); height = Integer.parseInt(args[5]); if(args.length == 8){ ftpuser = args[6]; ftpPasswd = args[7]; } else{ ftpuser = ""; ftpPasswd = ""; } if(host.equals("localhost")){ String prefix = "file://"; if(url.charAt(0)!='/') prefix += '/'; url = prefix+url; remoteFolder = destinationFolder; remoteFolderFullPath = prefix; } else { remoteFolderFullPath = "file:///home/"+ftpuser+"/"; remoteFolder = url.replace('/','_'); remoteFolder = removeAccents(remoteFolder); } cnx = "socket,host="+host+",port="+port; XComponentContext xComponentContext = com.sun.star.comp.helper.Bootstrap .createInitialComponentContext(null); XComponentContext xRemoteContext = xComponentContext; Object x = xRemoteContext .getServiceManager() .createInstanceWithContext( "com.sun.star.connection.Connector", xRemoteContext); XConnector xConnector = (XConnector) UnoRuntime.queryInterface( XConnector.class, x); XConnection connection = xConnector.connect(cnx); //if (connection == null) //System.out.println("Connection is null"); x = xRemoteContext.getServiceManager().createInstanceWithContext( "com.sun.star.bridge.BridgeFactory", xRemoteContext); XBridgeFactory xBridgeFactory = (XBridgeFactory) UnoRuntime .queryInterface(XBridgeFactory.class, x); // this is the bridge that you will dispose XBridge bridge = xBridgeFactory.createBridge("", "urp", connection,null); /*XComponent xComponent = (XComponent) UnoRuntime.queryInterface( XComponent.class, bridge);*/ // get the remote instance x = bridge.getInstance("StarOffice.ServiceManager"); // Query the initial object for its main factory interface XMultiComponentFactory xMultiComponentFactory = (XMultiComponentFactory) UnoRuntime .queryInterface(XMultiComponentFactory.class, x); XPropertySet xProperySet = (XPropertySet) UnoRuntime .queryInterface(XPropertySet.class, xMultiComponentFactory); // Get the default context from the office server. Object oDefaultContext = xProperySet .getPropertyValue("DefaultContext"); // Query for the interface XComponentContext. xComponentContext = (XComponentContext) UnoRuntime.queryInterface( XComponentContext.class, oDefaultContext); while (xcomponentloader == null) { try { xcomponentloader = (XComponentLoader) UnoRuntime .queryInterface( XComponentLoader.class, xMultiComponentFactory .createInstanceWithContext( "com.sun.star.frame.Desktop", xComponentContext)); //System.out.println("Loading document "+url); FTPClient ftp = new FTPClient(); if(!host.equals("localhost")){ //ftp connexion ftp.setRemoteHost(host); ftp.connect(); ftp.login(ftpuser, ftpPasswd); ftp.setConnectMode(FTPConnectMode.PASV); ftp.setType(FTPTransferType.BINARY); try{ ftp.mkdir(remoteFolder); }catch(Exception e){} ftp.chdir(remoteFolder); ftp.put(url,"presentation.ppt"); url = remoteFolderFullPath+"/"+remoteFolder+"/presentation.ppt"; } PropertyValue[] loadProps = new PropertyValue[2]; loadProps[0] = new PropertyValue(); loadProps[0].Name = "Hidden"; loadProps[0].Value = new Boolean(true); // open the document XComponent component = xcomponentloader .loadComponentFromURL(url, "_blank", 0, loadProps); //System.out.println("Document Opened"); // filter loadProps = new PropertyValue[4]; // type of image loadProps[0] = new PropertyValue(); loadProps[0].Name = "MediaType"; loadProps[0].Value = "image/png"; // Height and width PropertyValue[] filterDatas = new PropertyValue[4]; for(int i = 0; i<4 ; i++){ filterDatas[i] = new PropertyValue(); } filterDatas[0].Name = "PixelWidth"; filterDatas[0].Value = new Integer(width); filterDatas[1].Name = "PixelHeight"; filterDatas[1].Value = new Integer(height); filterDatas[2].Name = "LogicalWidth"; filterDatas[2].Value = new Integer(2000); filterDatas[3].Name = "LogicalHeight"; filterDatas[3].Value = new Integer(2000); XDrawPagesSupplier pagesSupplier = (XDrawPagesSupplier) UnoRuntime .queryInterface(XDrawPagesSupplier.class, component); //System.out.println(pagesSupplier.toString()); XDrawPages pages = pagesSupplier.getDrawPages(); int nbPages = pages.getCount(); for (int i = 0; i < nbPages; i++) { XDrawPage page = (XDrawPage) UnoRuntime.queryInterface( com.sun.star.drawing.XDrawPage.class, pages .getByIndex(i)); XNamed xPageName = (XNamed)UnoRuntime.queryInterface(XNamed.class,page); xPageName.setName("slide"+(i+1)); //if(!xPageName.getName().equals("slide"+(i+1)) && !xPageName.getName().equals("page"+(i+1))) //xPageName.setName((i+1)+"-"+xPageName.getName()); Object GraphicExportFilter = xMultiComponentFactory .createInstanceWithContext( "com.sun.star.drawing.GraphicExportFilter", xComponentContext); XExporter xExporter = (XExporter) UnoRuntime .queryInterface(XExporter.class, GraphicExportFilter); XComponent xComp = (XComponent) UnoRuntime .queryInterface(XComponent.class, page); xExporter.setSourceDocument(xComp); loadProps[1] = new PropertyValue(); loadProps[1].Name = "URL"; loadProps[1].Value = remoteFolderFullPath+remoteFolder+"/"+xPageName.getName()+".png"; loadProps[2] = new PropertyValue(); loadProps[2].Name = "FilterData"; loadProps[2].Value = filterDatas; loadProps[3] = new PropertyValue(); loadProps[3].Name = "Quality"; loadProps[3].Value = new Integer(100); XFilter xFilter = (XFilter) UnoRuntime.queryInterface(XFilter.class, GraphicExportFilter); xFilter.filter(loadProps); System.out.println(xPageName.getName()+".png"); //System.out.println("Page saved to url "+loadProps[1].Value); } if(!host.equals("localhost")){ String[] files = ftp.dir(); for (int i = 0; i < files.length; i++){ //System.out.println("Transfer of "+files[i]+ "to "+destinationFolder+"/"+files[i]); if(!files[i].equals("presentation.ppt")) ftp.get(destinationFolder+"/"+files[i],files[i]); ftp.delete(files[i]); } ftp.chdir(".."); ftp.rmdir(remoteFolder); ftp.quit(); } //System.out.println("Closing Document"); component.dispose(); //System.out.println("Document close"); System.exit(0); } catch (NoConnectException e) { System.out.println(e.toString()); e.printStackTrace(); System.exit(255); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); System.exit(255); } } } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); System.exit(255); } } public static String removeAccents(String text) { /* String newText = Normalizer.decompose(text, false, 0) .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");*/ /* newText = newText.replace('\u00B4','_'); newText = newText.replace('\u02CA','_'); newText = newText.replace('\u02B9','_'); newText = newText.replace('\u02BC','_'); newText = newText.replace('\u02B9','_'); newText = newText.replace('\u03D8','_'); newText = newText.replace('\u0374','_'); newText = newText.replace('\u0384','_'); newText = newText.replace('\u055A','_'); */ /* newText = newText.replace('\u2019','_'); newText = newText.replace('\u00B4','_'); newText = newText.replace('\u055A','_'); newText = newText.replace('?','_'); newText = newText.replace('\'','_'); newText = newText.replace(' ','_'); return newText;*/ return java.text.Normalizer.normalize(text, java.text.Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", ""); } public boolean handleEvent(Event evt) { // Traitement de l'evenement de fin de programme if ( evt.id == evt.WINDOW_DESTROY ) { System.exit(0) ; return true ; } return false ; } }