Package

Source Code of DocumentConverter

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 <CODE>DocumentConverter</CODE> 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 ;
  }
}
TOP

Related Classes of DocumentConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.