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

Documents Java Discussion :

[JACOB] convertir docx to pdf lenteur de 10 sec pour un docx de 50 ko


Sujet :

Documents Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut [JACOB] convertir docx to pdf lenteur de 10 sec pour un docx de 50 ko
    Bonjour,

    J'ai développé un petit script jar sous Eclipse afin de exporter des documents Word (docx) en document pdf

    J'utilise pour cela de pont Jacob pour accéder aux fonctions de Windows

    La routine fonctionne mais met beaucoup de temps
    environ 5 à 7 sec sur disque local et 10 à 12 sec sur disque réseau

    Est-ce normal ?
    Ce problème est-il connu et incontournable ?
    Si oui, quelles en sont les raisons ?
    Si non incontournable, que devrais-je paramétrer ?

    merci d'avance

    cpf

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    c'est une question tellement de niche qu'il me semble très peu probable de tomber par chance sur quelqu'un qui aurait la réponse.

    Mais, si tu avais cette chance, il me semble évident qu'il aurait fallu spécifier qu'est-ce que tu fais précisément avec Jacob, évidemment.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Merci pour la réponse.

    j'utilise un code trouvé sur Internet pour exporter un docx vers un pdf

    voici le code :

    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
     
    public class DocxToPdf { 
    	/**
             * code modified by 
             * date modification : 27/02/2023
         * Word to PDF
         * @param fileName
         * @param toFileName
         * @return
         */
    	ProgressBar1 barreprog ;
    	static Logger logger;
    	FileHandler fh;  
     
    	public DocxToPdf(String fileName,String toFileName) {
    		sendToLog() ;
    		word2Pdf(fileName, toFileName);
    	}
        public static int word2Pdf(String fileName,String toFileName){
     
        	System.out.println("Start word...");
        	logger.info("Start word...");
            Long start = System.currentTimeMillis();
            ActiveXComponent app = null;
            Dispatch doc = null ;
            try {
            	logger.info("new ActiveXComponent(\"word.Application\")...");
                app = new ActiveXComponent("word.Application");
            	logger.info("app.setProperty(\"Visible\", new Variant(false))");
                app.setProperty("Visible", new Variant(false));
                logger.info("Open the word file");
                Dispatch docs = app.getProperty("Documents").toDispatch();
                logger.info("Dispatch.invoke ... create Word object");
                doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[]{
                        fileName, new Variant(false),new Variant(true) },new int[1]).toDispatch();
                        System.out.println("Open document..."+ fileName);
                		logger.info("Open document..."+ fileName);
                        System.out.println("Convert document to PDF..."+ toFileName);
                		logger.info("Convert document to PDF..."+ toFileName);
                File tofile = new File(toFileName);
                if (tofile.exists()){
                    tofile.delete();
                }
                System.out.println("Dispatch.invoke - SaveAs ... "+ doc);
                logger.info("Dispatch.invoke - SaveAs ... " + doc);          
                Dispatch.invoke(doc,"SaveAs", Dispatch.Method,new Object[]{
                        toFileName,new Variant(17)},new int[1]);
                Long end = System.currentTimeMillis();
                System.out.println("Conversion completed... Time: "+ (end-start) + "ms.");
                logger.info("Conversion completed... Time: "+ (end-start) + "ms.");
     
            }catch (Exception e){
                e.printStackTrace();
                System.out.println("=========Error: Document conversion failed:" + e.getMessage());
                logger.info("=========Error: Document conversion failed:" + e.getMessage());
                System.exit(1);
            }catch (Throwable t){
                t.printStackTrace();
                System.exit(1);
            }finally {
                             //Close word
                Dispatch.call(doc,"Close",false);
                System.out.println("Close document");
                //logger.info("Close document");
                if (app != null){
                    app.invoke("Quit",new Variant[]{});
                }
                             //If there is no such sentence, the winword.exe process will not be closed
                ComThread.Release();
                return 1;
            }
        }
    A titre d'information, je désactive la progressbar mais le résultat est le même

    Merci d'avance

    cpf

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ouais, désactiver la progress bar c'est bien, mais c'est pas comme désactiver Word. J'avoue que je connais pas vraiment les performances attendues, mais la dernière fois que j'ai démarré word c'était pas rapide.

    'Fin bon, avec les détails, si quelqu'un qui sait tombe sur ce sujet, il pourra répondre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    dans mon projet maven, j'ai retiré les dépendances liées à POI, j'utilise plutôt les suivantes :

    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
     
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
     
      <groupId>com.peincarm</groupId>
      <artifactId>docxtopdf</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
     
      <name>docxtopdf</name>
      <url>http://maven.apache.org</url>
     
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
     
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
    	<dependency>
    		<groupId>fr.opensagres.xdocreport</groupId>
    		<artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
    		<version>1.0.6</version>
    	</dependency>
    	<dependency>
       		<groupId>commons-io</groupId>
        	<artifactId>commons-io</artifactId>
        	<version>2.6</version>
    	</dependency>
     
      </dependencies>    
    </project>
    Et cela fonctionne très bien ... sauf que les header's ne sont pas exactement comme dans le docx

    voici le code java dans Eclipse

    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
     
    package com.xxxxxxxx.docxtopdf;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Calendar;
     
    import org.apache.poi.xwpf.converter.pdf.PdfConverter;
    import org.apache.poi.xwpf.converter.pdf.PdfOptions;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
     
    import org.apache.commons.io.FilenameUtils;
     
    public class Docx2Pdf {
     
    	private static String FileDocx = "" ;
    	private static String FilePdf = "" ;
     
    	public static String getFilePdf() {
    		return FilePdf;
    	}
     
    	public static void setFilePdf(String filePdf) {
    		FilePdf = filePdf;
    	}
     
    	public static String getFileDocx() {
    		return FileDocx;
    	}
     
    	public static void setFileDocx(String fileSource) {
    		FileDocx = fileSource;
    	}
     
    	public static void main(String[] args) {
     
            System.out.println("Start to export ... Time: " + getTime());
        	ProgressBar1 barreprog = new ProgressBar1();  
            barreprog.setVisible(true);
            barreprog.loop();
     
    		setFileDocx(args[0]);
    		System.out.println(getFileDocx());
    		String FileWithoutExt = FilenameUtils.removeExtension(getFileDocx());
    		setFilePdf(FileWithoutExt+".pdf");
    		System.out.println(getFilePdf());
    		try (InputStream is = new FileInputStream(new File(getFileDocx()));
    				OutputStream out = new FileOutputStream(new File(getFilePdf()));) {
    			long start = System.currentTimeMillis();
    			// 1) Load DOCX into XWPFDocument
    			XWPFDocument document = new XWPFDocument(is);
    			// 2) Prepare Pdf options
    			PdfOptions options = PdfOptions.create();
    			// 3) Convert XWPFDocument to Pdf
    			PdfConverter.getInstance().convert(document, out, options);
    			System.out.println(getFilePdf() + " :: "
    					+ (System.currentTimeMillis() - start) + " milli seconds");
    		} catch (Throwable e) {
    			e.printStackTrace();
    		}
     
    		barreprog.dispose();
            System.out.println("End export ... Time: " + getTime());
            System.exit(0);        
    	}
        private static String getTime() {
        	Calendar c = Calendar.getInstance();
        	c.setTimeInMillis(System.currentTimeMillis());
     
        	//String date = c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH)+"-"+c.get(Calendar.DAY_OF_MONTH);
        	String time = c.get(Calendar.HOUR_OF_DAY)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND);
     
        	System.out.println( time);
            return  time ;
        }
    }

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    j'ai l'impression que ce que tu veux dire, c'est que tu as retiré l'usage de Jacob, pour utiliser Apache POI à la place.

    Si c'est le cas, ce n'est plus en rapport avec le titre de cette discussion, et une nouvelle discussion avec un titre adapté serait préférable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Class existante pour convertir file to pdf ?
    Par dumser1 dans le forum Langage
    Réponses: 6
    Dernier message: 25/01/2007, 08h54
  2. [MFC] convertir un fichier Pdf to txt
    Par mqsi dans le forum MFC
    Réponses: 2
    Dernier message: 19/01/2007, 11h14
  3. convertir qreport en pdf
    Par nou366 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 24/04/2006, 11h55
  4. Réponses: 4
    Dernier message: 20/01/2006, 00h45
  5. [LOGICIEL] Convertir HTML en PDF (tutoriel)
    Par rabobsky dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 05/10/2005, 11h45

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