Changement parametres d'exportation ou macro dans Draw

Bonjour,
Je fais pas mal d'exportation au format PNG depuis draw mais c'est assez long:
*Draw ne se souvient pas des derniers paramètres utilisés et on doit resaisir à chaque fois:
- L'extension par défaut de l'exportation est gif et Je n'ai pas trouvé comment la changer
- Il faut décocher la transparence pour que le fichier exporté soit lisible
- Quand on change la définition, la taille de la feuille est modifiée, ce qui fait que la taille de l'image ne change pas, il faut resaisir la largeur de la feuille pour que le changement soit de définition soit effectivement pris en compte (pour moi c'est un bug)
- Éventuellement, je changerais bien le taux de compression, mais Je ne le fais jamais, ça fait une commande de plus et de toutes façons, le taux de compression natif LO n'est pas très bon

Je ferais bien une macro, ce qui me permettrais de faire des exportations automatiques en plusieurs définitions, mais l'enregistreur de macros n'apparait pas dans le menu macro de draw (je l'ai bien sélectionné dans les options avancées) - il s'affiche dans writer et calc -
Quelqu'un aurait-il une piste pour la syntaxe d'exportation draw dans une macro ?

salutations

bonjour,

    je vous conseille de passer par le shell et d'employer gif2png

    http://gnuwin32.sourceforge.net/packages/pngutils.htm

    ou d'employer imagemagick qui est également adapté au travail
    par batch ...

    voici comment je compte faire sous linux
    (à adapter pour powershell) :

for img in $(tree |awk '/gif/ {print$2}'|xargs) ; do gif2png $img ;done

   autrement, je peut prêter un accès sur un serveur à l'aide de
   mstsc et d'un compte ftp ou directement via ssh
   (mobaxterm ou putty)
   
   slt
   bernard

Bonjour,

Du temps où j'écrivais des macros, j'en avais faite une en m'inspirant d'une macro trouvée sur internet et du livre de Bernard Marcilly et Laurent Godart.
Je viens de la tester, elle fonctionne encore.
Comme elle était restée à l'état d'essai, le nom du fichier d'export et la dpi sont inscrits en dur dans la macro et sont donc à modifier à la main.

Cordialement
Agnès S.

REM ***** BASIC *****

Sub Export2png
REM Filter dependent filter properties
Dim aFilterData (8) As New com.sun.star.beans.PropertyValue
Dim sFileUrl As String
Dim oDoc AS Object
Dim oDrawPage As Object

oDoc = thisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)

' NOM DU FICHIER D'EXPORT
' pour windows : file:///C:/temp/image.png
' pour linux : "file:///home/moi/image.png
sFileUrl = "file:///home/agnes/image.png"

' PARAMETRES D'EXPORTATION
' 72 dpi
' 'conversion => mm => inches => pixels (72 dpi)
aFilterData(0).Name = "PixelWidth"
aFilterData(0).Value = oDrawPage.Width*(72/2540)
aFilterData(1).Name = "PixelHeight"
aFilterData(1).Value = oDrawPage.Height*(72/2540)

' compression
aFilterData(2).Name ="Compression"
aFilterData(2).Value = 0 'de 0 à 9
' entrelacement
aFilterData(3).Name ="Interlaced"
aFilterData(4).Value = 0
' transparence
aFilterData(5).Name = "Translucent"
aFilterData(6).Value = false
' resolution, for use when loading in another image application
' ???
aFilterData(7).Name = "Resolution"
aFilterData(7).Value = 600

' pour bmp ?
'aFilterData(8).Name ="LogicalWidth"
'aFilterData(8).Value = 1704
'aFilterData(9).Name ="LogicalHeight"
'aFilterData(9).Value = 2272

' pour jpg ?
'aFilterData(10).Name ="Quality"
'aFilterData(10).Value = 100

'inutile pour png ?
'aFilterData(11).Name = "ColorMode"
'aFilterData(11).Value = 0
'aFilterData(12).Name = "ExportMode"
'aFilterData(12).Value = 1

' PAGE OU SELECTION
' si sélection, ce doit être un groupe
xDoc = ThisComponent
xView = xDoc.currentController
xSelection = xView.selection
If isEmpty( xSelection ) Then
  xObj = xView.currentPage
  Else
  xObj = xSelection
  End If
ExportPng( xObj, sFileUrl, aFilterData() )
End Sub

Sub ExportPng( xObject, sFileUrl As String, aFilterData )
Dim xExporter
xExporter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
xExporter.SetSourceDocument( xObject )
Dim aArgs (2) As New com.sun.star.beans.PropertyValue
Dim aURL As New com.sun.star.util.URL
aURL.complete = sFileUrl
aArgs(0).Name = "MediaType"
aArgs(0).Value = "image/png"
aArgs(1).Name = "URL"
aArgs(1).Value = aURL
aArgs(2).Name = "FilterData"
aArgs(2).Value = aFilterData
xExporter.filter( aArgs() )
End Sub

Bonsoir, cela ne résout que le problème du format. Pour les batch de conversion d'image, J'utilise plutôt IrfanView mais la taille des fichiers générée est excessive pour les fichiers PNG, aussi Je ferais peut-être un essai.

L'un des plus gros problèmes, c'est la définition de l'image, car un fichier de type Draw doit être exporté à la définition native, car une conversion de taille fait exploser la taille du fichier à cause du lissage des bords et en plus baisse la qualité. Typiquement, si je divise le nombre de pixels par 3 ou 4, Je me retrouve avec un fichier trois fois plus gros que l'original alors que si j'exporte directement à la résolution réduite souhaitée, la taille du fichier est réduite en conséquence. Globalement, ça fait une différence de taille de fichier qui varie de cinq à dix fois, ce que Je ne peux pas négliger pour une publication Internet. Du coup, parfois je préfère utiliser le jpeg, ce qui est très peu optimal pour un fichier de dessin vectoriel, mais qui se comporte mieux en redimensionnement.

Il n'y a pas d'espoir du coté des macros ? Sans enregistreur, comment connaitre la syntaxe ?

Salutations

Bonjour,

Il n'y a pas d'espoir du coté des macros ? Sans enregistreur, comment
connaitre la syntaxe ?

Si, mais il faut lire les réponses à la question posée :wink:
http://listarchives.libreoffice.org/fr/users/msg28946.html

Cordialement
Agnès S.

Merci, c'est ce que je recherchais, mais le premier message n'est pas arrivé dans ma boite mail.

J'ai modifié les macros pour :

- Exporter chaque page (dans le répertoire courant, avec le nom du fichier source+le numéro de page)

- Exporter deux images a des définitions différentes pour chaque page

- Avoir en option un nom à la place du numéro de page, stocké dans un tableau

Le nombre de pixels n'est pris en compte que s'il est entier, les valeurs décimales ne marchent pas.

J'ai fait deux variantes

- Export2png qui exporte la totalité de chaque page avec une densité de pixel définie (en dpi)

- ExportSelPng qui n'exporte que ce qui est visible (sélectionner tout), avec une largeur d'image fixée en pixels

Pour la deuxième variante, on peut en option saisir des tableaux définissant la largeur de chaque image. Si le tableau n'est pas rempli, la largeur par défaut est utilisée.

J'ai essayé de faire une variante d'exportation en jpg, dans ce cas il faut utiliser les variables LogicalHeight et LogicalWidth avec un coefficient, mais pour une raison inconnue, Je ne peut pas avoir d'images de plus de 497 pixels de large.

Salutations, Pierre

REM ***** BASIC *****

Sub Export2png 'Exporte la pleine page sur une densité de pixels
REM Filter dependent filter properties
Dim aFilterData (4) As New com.sun.star.beans.PropertyValue
Dim sFileUrl As String
Dim oDoc AS Object
Dim oDrawPage As Object
Dim curFile, aFile, aPage as string
Dim defdpi as integer
Dim cfRed as double
Dim wd, ht as long
'Ce qui suit est un exemple pour nomme les pages (au lieu de p1, p2, etc.)
pageName = array ("Nom_Page_1","Nom_Page_2")

defdpi= 160 ' densité de pixel en dpi export pour la grande image (.p.png)
cfRed = 0.32 'Coefficient de réduction pour l'image réduite (.s.png)

oDoc = thisComponent
curFile = ThisComponent.getURL()
curFile = Left(curFile, Len(curFile)-4) 'Supprime l'extension de fichier (.odg)

For i = 0 to oDoc.getDrawPages().Count-1 'Balaye toutes les pages
     oDrawPage = oDoc.getDrawPages().getByIndex(i)
     oDoc.CurrentController.setCurrentPage(oDrawPage)
     xObj = oDoc.currentController.currentPage
     ' PARAMETRES D'EXPORTATION
     aFilterData(0).Name = "PixelWidth"
     aFilterData(0).Value = Int(oDrawPage.Width*(defdpi/2540))
     aFilterData(1).Name = "PixelHeight"
     aFilterData(1).Value = Int(oDrawPage.Height*(defdpi/2540))
     ' compression
     aFilterData(2).Name ="Compression"
     aFilterData(2).Value = 9 'de 0 à 9
     ' entrelacement
     aFilterData(3).Name ="Interlaced"
     aFilterData(3).Value = 0
     ' transparence
     aFilterData(4).Name = "Translucent"
     aFilterData(4).Value = false

     aPage = "_p"+ (i+1)
     on error Resume Next
            aPage = "_"+pageName(i)
            aFilterData(0).Value = arrWidthp(i)
     on error Goto 0
     sFileUrl = curFile + aPage + ".p.png"
     ExportPng( xObj, sFileUrl, aFilterData() )
     Wait 500
     aFilterData(0).Value = Int(aFilterData(0).Value * cfRed)
     aFilterData(1).Value = Int(aFilterData(1).Value * cfRed)
     on error Resume Next
            aFilterData(0).Value = arrWidths(i)
     on error Goto 0
     sFileUrl = curFile + aPage + ".s.png"
     ExportPng( xObj, sFileUrl, aFilterData() )
     Wait 500
Next i

End Sub

Sub ExportSelPng 'Exporte la selection complete de chaque page sur une largeur fixée
REM Filter dependent filter properties
Dim aFilterData (8) As New com.sun.star.beans.PropertyValue
Dim sFileUrl As String
Dim oDoc, fDoc, dispatcher AS Object
Dim oDrawPage As Object
Dim curFile, aFile, aPage as string
Dim defdpi, par as integer
Dim cfRed as double
Dim wd, ht as long
'Nomme les pages, pour remplacer le numéro de page - ce qui suit est un exemple
pageName = array ("sens","pose","tapees","accouplees","battement","volets_pliants","montages_speciaux","types_courants","autres_types","symboles","symboles2","details","loqueteau")
'largeurs par défaut
widthp = 1536 ' Largeur par défaut de la grande image - la hauteur s'ajuste automatiquement
widths = 576 ' Largeur par défaut de la petite image
'Tableaux des largeurs si non constantes
arrWidths = array (1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,800)
arrWidths = array (640,576,512,512,576,512,512,576,576,512,512,640,172)

oDoc = ThisComponent
curFile = ThisComponent.getURL()
curFile = Left(curFile, Len(curFile)-4) 'Supprime l'extension de fichier (.odg)

For i = 0 to oDoc.getDrawPages().Count-1 'Balaye toutes les pages
     oDrawPage = oDoc.getDrawPages().getByIndex(i)
     oDoc.CurrentController.setCurrentPage(oDrawPage)
     ' PARAMETRES D'EXPORTATION
     aFilterData(0).Name = "PixelWidth"
     aFilterData(0).Value = widthp
     'aFilterData(1).Name = "PixelHeight"
     'aFilterData(1).Value =
     ' compression
     aFilterData(2).Name ="Compression"
     aFilterData(2).Value = 9 'de 0 à 9
     ' entrelacement
     aFilterData(3).Name ="Interlaced"
     aFilterData(3).Value = 0
     ' transparence
     aFilterData(4).Name = "Translucent"
     aFilterData(4).Value = false

     aFilterData(6).Name = "ExportMode"
     aFilterData(6).Value = 0

     fDoc = oDoc.CurrentController.Frame
     dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
     dispatcher.executeDispatch(fDoc, ".uno:SelectAll", "", 0, Array())

     xObj = oDoc.currentController.currentPage
     xView = oDoc.currentController
     'Select all components of this page

     xSelection = xView.selection 'pour pouvoir exporter une sélection correctement, il faudrait connaitre ses dimensions
     If isEmpty( xSelection ) Then
         xObj = xView.currentPage
     Else
         xObj = xSelection
     End If
     aPage = "_p"+ (i+1)
     on error Resume Next
            aPage = "_"+pageName(i)
            aFilterData(0).Value = arrWidthp(i)
     on error Goto 0
     oDoc.CurrentController.setCurrentPage(oDrawPage)
     sFileUrl = curFile + aPage + ".p.png"
     ExportPng (xObj, sFileUrl, aFilterData())
     Wait 500
     aFilterData(0).Value = widths
     on error Resume Next
        aFilterData(0).Value = arrWidths(i)
     on error Goto 0
     sFileUrl = curFile + aPage + ".s.png"
     ExportPng (xObj, sFileUrl, aFilterData())
     Wait 500
Next i

End Sub

Sub ExportPng( xObject, sFileUrl As String, aFilterData )
Dim xExporter
xExporter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
xExporter.SetSourceDocument(xObject)
Dim aArgs (2) As New com.sun.star.beans.PropertyValue
Dim aURL As New com.sun.star.util.URL
aURL.complete = sFileUrl
aArgs(0).Name = "MediaType"
aArgs(0).Value = "image/png"
aArgs(1).Name = "URL"
aArgs(1).Value = aURL
aArgs(2).Name = "FilterData"
aArgs(2).Value = aFilterData
xExporter.filter( aArgs() )
End Sub

Bonsoir, J'ai fait une version (Draw) pour l'exportation jpeg (uniquement pour la sélection)

la clef est :

* La valeur LogicalWidth doit être égale à la valeur PixelWidth

* Le MediaType doit être "image/jpeg" et non "image/jpg"

Sub ExportSelJpg
REM Filter dependent filter properties
Dim aFilterData (10) As New com.sun.star.beans.PropertyValue
Dim sFileUrl As String
Dim oDoc AS Object
Dim oDrawPage As Object
Dim curFile, aFile, aPage, aExtp as string
Dim defdpi as integer
Dim cfRed#

aEXtp=".p" 'extension pour image principale
aEXts=".s"

'Nomme les pages, pour remplacer le numéro de page - ce qui suit est un exemple
pageName = array ("sens","pose","tapees")
'largeurs par défaut
widthp = 1536 ' Largeur par défaut de la grande image - la hauteur s'ajuste automatiquement
widths = 576 ' Largeur par défaut de la petite image
'Tableaux des largeurs si non constantes
arrWidths = array (1536,1200)
arrWidths = array (640,576,512)

oDoc = thisComponent
curFile = ThisComponent.getURL()
curFile = Left(curFile, Len(curFile)-4) 'Supprime l'extension de fichier (.odg)

For i = 0 to oDoc.getDrawPages().Count-1 'Balaye toutes les pages

     oDrawPage = oDoc.getDrawPages().getByIndex(i)
     oDoc.CurrentController.setCurrentPage(oDrawPage)

     ' PARAMETRES D'EXPORTATION
     aFilterData(0).Name = "PixelWidth"
     aFilterData(0).Value = widthp

     aFilterData(8).Name ="LogicalWidth"

     aFilterData(10).Name ="Quality"
     aFilterData(10).Value = 85
     'Selectionne tous les objets
     fDoc = oDoc.CurrentController.Frame
     dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
     dispatcher.executeDispatch(fDoc, ".uno:SelectAll", "", 0, Array())

     xObj = oDoc.currentController.currentPage
     xView = oDoc.currentController
     xSelection = xView.selection
     If isEmpty (xSelection) Then
         xObj = xView.currentPage
     Else
         xObj = xSelection
     End If
     on error Resume Next
            aPage = "_"+pageName(i)
            aFilterData(0).Value = arrWidthp(i)
        on error Goto 0
     aFilterData(8).Value = aFilterData(0).Value
     sFileUrl = curFile + aPage + aExtp + ".jpg"
     ExportJpg( xObj, sFileUrl, aFilterData() )
     Wait 500
     aFilterData(0).Value = widths
     on error Resume Next
            aFilterData(0).Value = arrWidths(i)
        on error Goto 0
        aFilterData(8).Value = aFilterData(0).Value
      sFileUrl = curFile + aPage + aExts + ".jpg"
     ExportJpg( xObj, sFileUrl, aFilterData() )
     Wait 500
Next i
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oDoc.CurrentController.setCurrentPage(oDrawPage) 'revient en page 1

End Sub

Sub ExportJpg (xObject, sFileUrl As String, aFilterData)
Dim xExporter
xExporter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
xExporter.SetSourceDocument(xObject)
Dim aArgs (2) As New com.sun.star.beans.PropertyValue
Dim aURL As New com.sun.star.util.URL
aURL.complete = sFileUrl
aArgs(0).Name = "MediaType"
aArgs(0).Value = "image/jpeg" 'Et non "image/jpg" !
aArgs(1).Name = "URL"
aArgs(1).Value = aURL
aArgs(2).Name = "FilterData"
aArgs(2).Value = aFilterData
xExporter.filter (aArgs())
End Sub

Salutations, Pierre

Merci pour cette version considérablement enrichie.
Pour les autres formats, la difficulté c'est d'obtenir des infos sur les paramètres d'export. En regardant la fenêtre qui s'affiche quand on fait

Exporter pour un format donné on arrive à imaginer ce qui est

possible. Reste à trouver la syntaxe.
Pour la différence entre "PixelWidth" et "LogicalWidth" j'ai trouvé ça :
"Each graphic filter is supporting a property sequence which is called "FilterData" therein you can set the size in pixel with the properties "PixelWidth" and "PixelHeight", the logical size (in 1/100mm) can be set with "LogicalWidth" and "LogicalHeight"."

Pour avoir la taille de la sélection on peut faire ceci :

'****************
'calcul des dimensions en mm*100
'où oObj = oDoc.currentController.selection 'collection de toutes les formes sélectionnées

  Dim x0, y0, x1, y1 As Integer
  Dim ObjetLargeur, ObjetHauteur As Integer

  x0=oObj(0).Position.X
  y0=oObj(0).Position.Y
  x1=x0+oObj(0).Size.Width
  y1=y0+oObj(0).Size.Height
  For i=1 To (oObj.Count-1)
    If (oObj(i).Position.X<x0) Then x0=oObj(i).Position.X
    If (oObj(i).Position.Y<y0) Then y0=oObj(i).Position.Y
    If ((oObj(i).Position.X+oObj(i).Size.Width)>x1) then x1=oObj(i).Position.X+oObj(i).Size.Width
    If ((oObj(i).Position.Y+oObj(i).Size.Height)>y1) then y1=oObj(i).Position.Y+oObj(i).Size.Height
  Next i
  
  ObjetLargeur=x1-x0
  ObjetHauteur=y1-y0
'****************

Cordialement
Agnès S.

Bonsoir, Le calcul des dimensions d'une sélection d'objets fonctionne, mais j'ai dû passer le type int en long parce que j'avais des images qui dépassaient les limites.

J'ai repris ma macro d'exportation d'image et Je l'ai généralisée pour les formats png et jpeg, soit en pleine page, soit sur la sélection, sur une base de densité de pixels en DPI, mais en laissant la possibilité de faire un tableau de dimensions en pixels si l'on souhaite.

Les images sont exportées avec le nom du fichier, le numéro, le nom de la page, une extension qui dépend si c'est la petite ou la grande image, dans le répertoire du fichier, avec deux images (une grande et une petite) pour chaque page. Si vous voulez une seule taille par page, mettez la même définition et la même extension pour les deux tailles d'images.

J'ai fait des essais d'exportation en bmp, mais Je ne contrôle pas correctement les dimensions des grandes images qui plafonnent.

Est-ce que quelqu'un saurait comment sélectionner/déselectionner une couche en basic ?

Voici donc la mise à jour:

REM ***** BASIC *****

'Exportation automatique de pages Libre office draw vers un format image bitmap, une image par page

sub ExportFullPng 'exporte la pleine page
     ExportImg ("png", false, 220, 100, ".p", ".s")
end sub

sub ExportFullJpg
     ExportImg ("jpg", false, 220, 100, ".p", ".s")
end sub

sub ExportSelPng 'exporte uniquement les graphismes de la page (sélection automatique)
     ExportImg ("png", true, 220, 100, ".p", ".s")
end sub

sub ExportSelJpg
     ExportImg ("jpg", true, 220, 100, ".p", ".s")
end sub

sub ExportSelBmp 'exporte, mais la définition n'est pas claire, seul le paramètre de la petite image semble avoir un effet
     ExportImg ("bmp", true, 220, 50, ".p", ".s")
end sub

Sub ExportImg (format, selection, dpiLarge, dpiSmall, aEXtp, aEXts) 'Exporte la selection complete de chaque page en fonction de dpi

'aEXtp = 'extension de la grande image
'aEXts = 'extension de la petite image

REM Filter dependent filter properties
Dim aFilterData (10) As New com.sun.star.beans.PropertyValue
Dim sFileUrl As String
Dim oDoc, fDoc, dispatcher AS Object
Dim oDrawPage As Object
Dim curFile, aFile, aPage as String
'aEXtp, aEXts
Dim defdpi as Integer
Dim selWidth,selHeight as Long
Dim cfRed, hratio as double
Dim gsize (2)
'Nomme les pages, pour remplacer le numéro de page - ce qui suit est un exemple
pageName = array ("sens","pose","tapees","accouplees","battement","volets_pliants","montages_speciaux","types_courants","autres_types","symboles","symboles2","details","loqueteau","tableau","entrees_d_air")

'Vous pouvez imposer les dimensions d'image au lieu des densités de pixels en remplissant ces tableaux -> les dpi images seront erronés
'arrWidthp = array (1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,800)
'arrWidths = array (640,576,512,512,576,512,512,576,576,512,512,640,220)

oDoc = ThisComponent
curFile = ThisComponent.getURL()
curFile = Left(curFile, Len(curFile)-4) 'Supprime l'extension de fichier (.odg)

For i = 0 to oDoc.getDrawPages().Count-1 'Balaye toutes les pages
     oDrawPage = oDoc.getDrawPages().getByIndex(i)
     oDoc.CurrentController.setCurrentPage(oDrawPage)
     if (selection) then
         fDoc = oDoc.CurrentController.Frame
         dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
         dispatcher.executeDispatch(fDoc, ".uno:SelectAll", "", 0, Array()) 'sélectionne tous les éléments
     end if
     xView = oDoc.currentController
     xObj = xView.currentPage
     xSelection = xView.selection
     If not(selection) or isEmpty(xSelection) then
         xObj = xView.currentPage
         selWidth = oDrawPage.Width 'Largeur de la page
         selHeight = oDrawPage.Height 'Largeur de la page
     else
         xObj = xSelection
         gsize = calcSize(xObj) 'Calcule la largeur des éléments sélectionnés
         selWidth = gsize(0)
         selHeight = gsize(1)
     End If
     hratio = selHeight/selWidth
     aPage = "_p"+ (i+1) 'nom de la page par défaut

     ' PARAMETRES D'EXPORTATION
     aFilterData(0).Name = "PixelWidth"
     aFilterData(0).Value = Int(selWidth*(dpiLarge/2540))
     on error Resume Next
         aPage = "_"+pageName(i) 'nomme la page si eelle est dans un tableau
         aFilterData(0).Value = arrWidthp(i) 'définit la largeur si elle est dans un tableau
     on error Goto 0
     aFilterData(1).Name = "PixelHeight"
     aFilterData(1).Value = Int(hratio*aFilterData(0).Value)
     ' compression - png
     aFilterData(2).Name ="Compression"
     aFilterData(2).Value = 9 'de 0 à 9
     ' entrelacement - png
     aFilterData(3).Name ="Interlaced"
     aFilterData(3).Value = 0
     ' transparence (png - doit être faux, sinon problème de lisibilité)
     aFilterData(4).Name = "Translucent"
     'Paramètres pour exportation jpeg
     aFilterData(4).Value = false
     aFilterData(7).Name = "Resolution"
     aFilterData(7).Value = dpiLarge 'Requis pour fichier bmp, mais le fonctionnement n'est pas clair
     aFilterData(8).Name ="LogicalWidth"
        aFilterData(8).Value = aFilterData(0).Value*2540/dpiLarge
     aFilterData(9).Name ="LogicalHeight"
       aFilterData(9).Value = aFilterData(1).Value*2540/dpiLarge
     aFilterData(10).Name ="Quality"
     aFilterData(10).Value = 85

     oDoc.CurrentController.setCurrentPage(oDrawPage)
     sFileUrl = curFile + aPage + aExtp + "." + format
     Export (xObj, sFileUrl, aFilterData(), format) 'Exporter grande image
     Wait 500
     aFilterData(0).Value = Int(selWidth*(dpiSmall/2540))
     on error Resume Next
         aFilterData(0).Value = arrWidths(i)
     on error Goto 0
     aFilterData(1).Value = Int(hratio*aFilterData(0).Value)
     if format="bmp" then
         aFilterData(8).Value = Int(aFilterData(8).Value*dpiSmall/dpiLarge)
         aFilterData(9).Value = Int(aFilterData(9).Value*dpiSmall/dpiLarge)
     end if
      sFileUrl = curFile + aPage + aExts + "." + format
     Export (xObj, sFileUrl, aFilterData(), format) 'Exporter petite image
     Wait 500
Next i
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oDoc.CurrentController.setCurrentPage(oDrawPage)

End Sub

Sub Export (xObject, sFileUrl As String, aFilterData, format)
Dim xExporter, mediaExt
xExporter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
xExporter.SetSourceDocument(xObject)
Dim aArgs (2) As New com.sun.star.beans.PropertyValue
Dim aURL As New com.sun.star.util.URL
aURL.complete = sFileUrl
if format="jpg" then
     mediaExt = "jpeg" ' "image/jpg" ne fonctionne pas correctement
else
     mediaExt = format
end if
aArgs(0).Name = "MediaType"
aArgs(0).Value = "image/"+mediaExt
aArgs(1).Name = "URL"
aArgs(1).Value = aURL
aArgs(2).Name = "FilterData"
aArgs(2).Value = aFilterData
xExporter.filter(aArgs())
End Sub

function calcSize (oObj) 'oObj est une selection d'objets graphiques dont on calcule les dimensions
Dim x0, y0, x1, y1 As Long 'La hauteur peut dépasser 32000-> entier long
     x0=oObj(0).Position.X
     y0=oObj(0).Position.Y
     x1=x0+oObj(0).Size.Width
     y1=y0+oObj(0).Size.Height
     For i=1 To (oObj.Count-1)
         If (oObj(i).Position.X<x0) Then x0=oObj(i).Position.X
         If (oObj(i).Position.Y<y0) Then y0=oObj(i).Position.Y
         If ((oObj(i).Position.X+oObj(i).Size.Width)>x1) then x1=oObj(i).Position.X+oObj(i).Size.Width
         If ((oObj(i).Position.Y+oObj(i).Size.Height)>y1) then y1=oObj(i).Position.Y+oObj(i).Size.Height
     Next i
     calcSize = array(x1-x0, y1-y0)
end function

Salutations, Pierre