begin process at 2008 07 21 00:10:23
1 213 521 membres
422 nouveaux aujourd'hui
14 167 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Génération de documents PDF avec Delphi et OpenOffice [ Divers / Aide et documentation ] (acarre)

Génération de documents PDF avec Delphi et OpenOffice le 05/04/2007 17:35:03

acarre
Bonjour,
Je développe actuellement une application permettant la conversion de documents au format .doc vers le format .pdf. Pour se faire, j'utilise l'API OpenOffice :
   - J'ouvre une instance d'openoffice en utilisant la fonction CreateOLEObject
   - Je crée une instance du document doc en cours à l'aide la méthode loadComponentFromUrl
   - J'enregistre le document au format pdf en utilisant la méthode storeToUrl
   - Je ferme le document.
   - Le fichier PDF est créé.
Mais mon problème est que lors du passage sur le storetoURL, OpenOffice semble allouer de l'espace mémoire (observé dans le gestionnaire des tâches de windows : un peu moins d'1 Mo par fichier) mais ne le libère jamais. Je dois traiter près de 5000 fichiers ce qui semble être beaucoup pour mon OS (Le bug est reproduit sur n'importe quel OS à savoir Windows 2000(512 Mo de RAM), 2003 (1Go de RAM) ou XP (1Go de RAM))

J'ai tenté d'ajouter "openoffice.dispose" pour fermer la session d'openoffice entre chaque fichier mais il n'arrive pas à le rouvrir. Dans ce cas j'ai un message d'erreur () sur le 
   openoffice := CreateOleObject('com.sun.star.ServiceManager');

Pour information, je travaille sous Delphi 2005 et OpenOffice 2.2.0.

Je vous remercie par avance pour la réponse.

Voici le bout de code :


try
   try
      result := false;
     if dstFile <> '' then
     begin
       ConnectOpenOffice;
       //Conversion du chemin du fichier vers un format reconnu de openoffice
       monFich:= convertToURL(srcFile);
       PropFich:= dummyArray;
       //Ouverture de openoffice en mode caché
       //ATTENTION : en OOo 2.0.2 ça plante donc utiliser OOo 2.0.3
       PropFich := CreateProperties(['Hidden', True]); // ici les noms de propriétés sont sensibles à la casse
       try
          //Chargement du document
          monDocument:= StarDesktop.LoadComponentFromURL(monFich, '_blank', 0, PropFich);
       except
      exit;
    end;
    PropFich:= dummyArray;
    PropFich:= CreateProperties(['FilterName', 'writer_pdf_Export']); // ici les noms de propriétés sont sensibles à la casse
    adresseDOC := convertToURL(dstFile);
    monDocument.storeToURL(adresseDOC,PropFich);
    monDocument.Close(True);
  end;
 
  result := true;
   except
  on e:Exception do
    LogErreur(e,'ConvertToPDF.execute');
   end;
 finally
  if not isnullEmpty(OPenOffice) then
  begin  
   stardesktop.terminate;
   stardesktop.unassigned;
   //openoffice.dispose
   openoffice.unassigned;
  end;
 end;



Re : Génération de documents PDF avec Delphi et OpenOffice le 10/04/2007 10:19:11

acarre
Réponse acceptée !
Bonjour,
Pour ceux que ça intéresse, pour contourner mon problème j'effectue un dispose d'OpenOffice entre chaque document et je désactive le démarrage automatique d'OpenOffice. De ce fait, les ressources assignée à OpenOffice sont automatiquement libérées. Le traitement en est rendu un peu plus long mais ainsi j'ai une meilleur maîtrise de la mémoire.
Après avoir posté sur le forum anglophone d'OpenOffice, j'ai découvert qu'OpenOffice n'est pas encore optimisé dans la gestion de la mémoire.

Bonne journée


Classé sous : end, format, pdf, openoffice, propfich

Participer à cet échange

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS