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