IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

No office executable found


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Points : 15
    Points
    15
    Par défaut No office executable found
    Bonjour,

    Je travaille sur un site web et je dois réaliser une partie dans laquelle on convertit un fichier PowerPoint en SWF

    J'ai deja une classe qui permet de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    package org.openoffice.ppt2flash.comp;
     
     
    import java.io.File;
    import java.net.MalformedURLException;
     
    import com.sun.star.beans.PropertyValue;
    import com.sun.star.comp.helper.Bootstrap;
    import com.sun.star.frame.XComponentLoader;
    import com.sun.star.frame.XStorable;
    import com.sun.star.io.IOException;
    import com.sun.star.lang.IllegalArgumentException;
    import com.sun.star.lang.XMultiComponentFactory;
    import com.sun.star.uno.UnoRuntime;
    import com.sun.star.uno.XComponentContext;
    import com.sun.star.uri.ExternalUriReferenceTranslator;
     
    public class ppt2flash {
     
    public static void main(String[] args) {
    try {
    new ppt2flash().convert("C:\\chapitre1.ppt");
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    System.exit(0);
    }
    }
     
    private XComponentContext xContext;
    private Object component;
    private Object desktop;
     
    /**
    * Convertit un fichier en flash
    * 
    * @param filename
    * @throws Exception
    */
    public void convert(String filename) throws Exception {
     
    startOpenOffice();
    String unoUrl = loadDocument(filename);
    generatePdf(unoUrl);
    }
     
    private void generatePdf(String unoUrl) throws IOException {
    XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
    XStorable.class, component);
     
    // Set properties for conversions
    PropertyValue[] convertProperties = new PropertyValue[2];
     
    convertProperties[0] = new PropertyValue();
    convertProperties[0].Name = "Overwrite";
    convertProperties[0].Value = new Boolean(true);
     
    convertProperties[1] = new PropertyValue();
    convertProperties[1].Name = "FilterName";
    convertProperties[1].Value = "draw_flash_Export";
     
    xStorable.storeToURL(unoUrl.substring(0, unoUrl.lastIndexOf('.')) + ".swf", convertProperties);
    }
     
    /**
    * Chargement d'un fichier OpenOffice
    * 
    * @param filename
    * @return
    * @throws MalformedURLException
    * @throws IOException
    * @throws IllegalArgumentException
    */
    private String loadDocument(String filename)
    throws MalformedURLException, IOException, IllegalArgumentException {
    XComponentLoader loader = (XComponentLoader) UnoRuntime.queryInterface(
    XComponentLoader.class, desktop);
     
    String unoUrl = formatUnoUrl(filename);
     
    // Value=true => pas d'interface graphique
    PropertyValue[] loadProperties = new PropertyValue[1];
    loadProperties[0] = new PropertyValue();
    loadProperties[0].Name = "Hidden";
    loadProperties[0].Value = new Boolean(true);
     
    component = loader.loadComponentFromURL(unoUrl, "_blank", 0,
    loadProperties);
    return unoUrl;
    }
     
    /**
    * Démarrage d'OpenOffice
    * 
    * @return Instance d'OOo avec contexte
    * @throws Exception
    */
    private Object startOpenOffice() throws Exception {
    xContext = Bootstrap.bootstrap();
    XMultiComponentFactory xMCF = xContext.getServiceManager();
     
    desktop = xMCF.createInstanceWithContext(
    "com.sun.star.frame.Desktop", xContext);
    return desktop;
    }
     
    /**
    * Formatte un chemin traditionnel en chemin compatible UNO 
    * 
    * @param filename Chemin du fichier, au format traditionnel
    * @return Chemin du fichier, au format UNO
    * @throws MalformedURLException 
    */
    private String formatUnoUrl(String filename)
    throws MalformedURLException {
    String unoUrl = ExternalUriReferenceTranslator.create(xContext)
    .translateToInternal(new File(filename).toURL().toExternalForm());
    return unoUrl;
    }
     
    }
    Le problème c'est que j'essaye de l'utiliser dans une servlet mai jarrive pas, voila la servlet que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.MalformedURLException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import com.sun.star.beans.PropertyValue;
    import com.sun.star.comp.helper.Bootstrap;
    import com.sun.star.frame.XComponentLoader;
    import com.sun.star.frame.XStorable;
    import com.sun.star.*;
    import com.sun.star.lang.IllegalArgumentException;
    import com.sun.star.lang.XMultiComponentFactory;
    import com.sun.star.uno.UnoRuntime;
    import com.sun.star.uno.XComponentContext;
    import com.sun.star.uri.ExternalUriReferenceTranslator;
     
     
    public class ServFlash extends HttpServlet {
     
    public ServFlash() {
    super();
    }
     
    public void destroy() {
    super.destroy(); 
    }
     
     
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    try {
    new ppt2flash().convert("C:\\chapitre1.ppt");
    } catch (Exception e) {
    e.printStackTrace(); }
    }
     
     
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
     
    doGet(request,response);
    }
    public void init() throws ServletException {
    // Put your code here
    }
     
    }
    lorsqe j'execute la servlet j'ai le message d'erreur suivant :

    com.sun.star.comp.helper.BootstrapException: no office executable found!
    at com.sun.star.comp.helper.Bootstrap.bootstrap(Bootstrap.java:253)

    est ce que la façon que j'ai utilisé n'est pa correcte, veuillez m'aider svp , commenet utiliser une classe qui fonctionne sous forme d'une servlet ?!!

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    Bonjour

    Je suis aussi un débutant, mais je pense pouvoir t'aiguiller.

    La principale différence qui déroute quand on utilise une servlet, c'est que celle-ci va être exécutée à l'intérieur d'un moteur de servlet comme par exemple tomcat. Ensuite il suffit que le moteur de servlet ne cherche pas openoffice au bon endroit et tu te prends l'erreur.


    Tandis que dans la classe qui n'est pas une servlet, le moteur de servlet n'intervient pas. La solution que je préconiserai serait de voir si la méthode que tu utilise, cad startOpenOffice() ne peut pas prendre le chemin d'acces vers ton installation de OpenOffice en paramètre.
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 441
    Points
    441
    Par défaut
    bonjour. Il me semble que tu dois démarrer le service openoffice (en ligne de commande - mais je sais plus comment) sur le poste à partir duquel tu exécute ton application

    edit : J'ai vu un lien en anglais ou ils parlent de la commande
    ici

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Merci, je vais essayer ça et je vous répond, merci de votre aide

  5. #5
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Citation Envoyé par alicom86 Voir le message
    Merci, je vais essayer ça et je vous répond, merci de votre aide
    alicom, as-tu trouvé une solution à ton problème de bootstrap ?

    J'ai le même problème que toi avec Ooo 3.

  6. #6
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    SI j'ai bien comrpis ce que tu recherches à faire.

    tu as un fichier de type power point que tu transformes en swf qui est l'extension flash afin que le power point passe en version animé.

    tu ne peux pas te content d'appele le même code juste à partir d'une servlet.

    Il faut préciser le type de donnée que ta servlet doit te renvoyer en précisant le content-type notament au niveau du header et ensuite lire le contenu

    Je te donne un exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    {
     
    	response.setContentType("YYYY");// exemple image/jpeg
    	response.setHeader("Content-Disposition","utiliser pour le monde d'ouverture il me semble pas obligatoire");
    	/*non obligatoire seulement si tu connais la taille du fichier renvoyer */
    	response.setContentLength("XXXXX");
     
     
    	OutputStream os = response.getOutputStream();
     
    	try
    	{
    		InputStream ips = //récupérer un inptStream à partir de l'objet/document qui doit être renvoyer par la servlet
     
    		byte buffer[] = new byte[512 * 1024];
    		int nbLecture;
     
    		while ((nbLecture = ips.read(buffer)) != -1)
    		{
    			os.write(buffer, 0, nbLecture);
    		}
    	}
    	catch (Exception e)
    	{		
    		e.printStakTrace();
    	}
    	finally {
    		try {
    			os.close();
    		} 
    		catch (Exception e) {
    			System.out.println("erreur lors de la fermeture du flux");		
    		}
    	}
    }
    En fonction du content type le navigateur lanceras l'outil par défaut associé à l'extension de la machine client.

    *Espère ne pas t'avoir trop embrouillé*

    Il te faudra peut être un bout de code html supplémentaire pour appele le Flash

  7. #7
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Ce n'est pas tout à fait ce que je demandais.

    J'aimerai savoir comment alicom86 a résolu son problème
    Citation Envoyé par alicom86
    com.sun.star.comp.helper.BootstrapException: no office executable found!
    at com.sun.star.comp.helper.Bootstrap.bootstrap(Bootstrap.java:253)
    Merci quand même

  8. #8
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Citation Envoyé par Aldian Voir le message
    Bonjour

    Je suis aussi un débutant, mais je pense pouvoir t'aiguiller.

    La principale différence qui déroute quand on utilise une servlet, c'est que celle-ci va être exécutée à l'intérieur d'un moteur de servlet comme par exemple tomcat. Ensuite il suffit que le moteur de servlet ne cherche pas openoffice au bon endroit et tu te prends l'erreur.


    Tandis que dans la classe qui n'est pas une servlet, le moteur de servlet n'intervient pas. La solution que je préconiserai serait de voir si la méthode que tu utilise, cad startOpenOffice() ne peut pas prendre le chemin d'acces vers ton installation de OpenOffice en paramètre.
    Une servlet ou application web ne peut pas appeler une application directement, question de sécurité.
    C'est le type de fichier qui sera renvoyé par la page html que l'ordinateur prendra en compte pour savoir si c'est openOffice, word, acrobat qui se lancera

Discussions similaires

  1. Executer une macro "extérieure" dans open office
    Par madlozoz dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 05/06/2009, 15h03
  2. [OpenOffice] Erreur : no office executable found!
    Par ericw78 dans le forum Documents
    Réponses: 0
    Dernier message: 28/12/2008, 18h45
  3. Error executing script: No content items could be found
    Par rane dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 12/06/2008, 12h40
  4. erreur : no office executable found!
    Par feasil dans le forum Général Java
    Réponses: 2
    Dernier message: 14/02/2008, 14h17
  5. Réponses: 2
    Dernier message: 19/10/2007, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo