(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/>