(Courriels de diversion: <rencontreras@reglera-devisagerait.com> <permissifs@creancier-colliger.com> <formulees@hachaient-protegeais.com> <catalogueriez@exciteriez-reconvertirait.com> <rationnera@acheverai-transcendants.com> <mutilerent@flânes-enrhuma.com> <bistros@discobole-laids.com> <entravions@voyagerions-inclue.com> <hurlantes@harcellerait-etirent.com> <singe@entre-croisade.com> )
Il y a quelques temps, je demandais comment convertir automatiquement, * par ligne de commande * sans interaction utilisateur comment transformer un doc en pdf. La solution que j'avais retenue, mais qui contenait un bug, consistait à utiliser openoffice dans le mode ad hoc. Aujourd'hui, j'ai un besoin similaire: convertir un doc en odt et un odt en doc et/ou pdf. Quelle solution adopter? La solution que j'envisage actuellement est basée sur un script shell qui appelle une macro openoffice, et un fichier openoffice qui contient la dite macro. Un bug est lié à la non fermeture, d'openoffice. Un autre bug est lié à des cas d'erreurs non déterminés (absence de conversion). ci après le code; qu'en pensez-vous? --8<----------------- shell ------- (utilisation) doc_vers_odt () { PATH="$PATH:`pwd`" # ajout de ooo2pdf.sh ( export BASEMACRO=`pwd`/ cd $1 && for i in *.doc do echo $i && doc2odt.sh $i done ls *.doc *.odt true #echo "La documentation a été convertie" ) || ( echo "ECHEC DANS LA CONVERSION EN ODT" ; false) } --8<----------------- shell ------- doc2odt.sh #!/bin/bash if [ "$1" = "" ]; then exit; fi fullpath=`cd \`dirname "$1"\` ; echo "\`pwd\`/\`basename "$1"\`"` echo $fullpath ooo-wrapper -invisible -headless -norestore $BASEMACRO/macro_doc_to_odt.odt "macro://macro_doc_to_odt/Standard.doc_to_odt.ConvertToODT($fullpath)" --8<----------------- macro ooo --- macro_doc_to_odt.odt Standard.doc_to_odt REM ***** BASIC ***** Function RightDotPos( cFile ) As Integer Dim iPos As Integer iPos = Len( cFile ) Do If Mid( cFile, iPos, 1 ) = "." Then Goto GotIt End If iPos = iPos - 1 Loop While iPos > 0 GotIt: RightDotPos() = iPos End Function Function MakePropertyValue( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue Dim oPropertyValue As New com.sun.star.beans.PropertyValue If Not IsMissing( cName ) Then oPropertyValue.Name = cName EndIf If Not IsMissing( uValue ) Then oPropertyValue.Value = uValue EndIf MakePropertyValue() = oPropertyValue End Function ' Cela fonctionne t-il? sub module_quit dim document as object dim dispatcher as object document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dim args1(1) as new com.sun.star.beans.PropertyValue dispatcher.executeDispatch(document, ".uno:Quit", "", 0, args1) end sub Sub ConvertToODT( cFile ) Dim oDoc As Object Dim cFilter As String On Error Goto Leave oDoc = StarDesktop.loadComponentFromURL( ConvertToURL( cFile ), "_blank", 0, Array(_ MakePropertyValue( "Hidden", True ),_ MakePropertyValue( "UpdateDocMode", com.sun.star.document.UpdateDocMode.QUIET_UPDATE ),_ ) ) If oDoc.SupportsService( "com.sun.star.text.TextDocument" ) Then cFilter = "writer8" ' ElseIf oDoc.SupportsService( "com.sun.star.sheet.SpreadsheetDocument" ) Then ' cFilter = "calc_pdf_Export" Else oDoc.Close( True ) Goto Leave EndIf Dim RDP As Integer RDP = RightDotPos( cFile ) If RDP = 0 Then oDoc.Close( True ) Goto Leave End If cFile = Left( cFile, RDP - 1 ) + ".odt" oDoc.storeToURL( ConvertToURL( cFile ), _ Array(_ MakePropertyValue( "FilterName", cFilter ),_ ) ) oDoc.Close( True ) Leave: module_quit() End Sub --8<----------------- ------------- -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>