[Résolu][Python] Export d'images de PPT sous Impress

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
sgeulette
Fraîchement OOthentifié
Messages : 7
Inscription : 24 avr. 2012 13:34

[Résolu][Python] Export d'images de PPT sous Impress

Message par sgeulette »

Bonjour,

Dans la macro python mise en pièce jointe, je parcoure des fichiers powerpoint (des milliers) pour en extraire les images.

Il y a cependant 2 cas qui ne sont pas couverts:
1) une image en arrière plan
2) une image bitmap utilisée comme remplissage dans une forme rectangle.

J'ai intégré ces 2 cas dans le fichier problems.odp, également zippé

Auriez-vous une idée de la façon d'accéder à ces images via l'api ?

Merci d'avance
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 5.1.6 (Avec APSO et MRI) on ubuntu 16.04
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12230
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Impress] Exporter les images de fichiers powerpoint

Message par Bidouille »

Pour la bonne tenue de ce forum, vous êtes invité à donner suite à : https://forum.openoffice.org/fr/forum/v ... =3&t=33382
Notamment en ajoutant le classique [Résolu] si tel est le cas.
sgeulette a écrit :Dans la macro python
Balisage modifié et titre adapté
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: [Python] Export d'images de PPT sous Impress

Message par Jurassic Pork »

hello,
sgeulette a écrit :Bonjour,

Dans la macro python mise en pièce jointe, je parcoure des fichiers powerpoint (des milliers) pour en extraire les images.

Il y a cependant 2 cas qui ne sont pas couverts:
1) une image en arrière plan
2) une image bitmap utilisée comme remplissage dans une forme rectangle.

J'ai intégré ces 2 cas dans le fichier problems.odp, également zippé

Auriez-vous une idée de la façon d'accéder à ces images via l'api ?

Merci d'avance
voici une solution possible pour l'arrière-plan mais le principe devrait être le même pour une image de remplissage.
1 - on récupère l'image de fond
2 - on crée un objet graphique
3 - on met l'image dedans
4 - on exporte l'objet en fichier image
voici un exemple de code en basic facilement adaptable au python :

Code : Tout sélectionner

Sub ExtraireFondImpress()
    Dim oDoc as Object
    Dim oGraphic as Object
    Dim oExporter as Object
    Dim oShape as Object
    Dim oDrawPages as Object, oDrawPage as Object
    Dim aURL As New com.sun.star.util.URL
    Dim aArgs(1) As New com.sun.star.beans.PropertyValue
    aURL.Complete  = ConvertToURL("M:\test\export.png" )
    aArgs(0).Name = "MediaType"
    aArgs(0).Value = "image/png"
    aArgs(1).Name = "URL"
    aArgs(1).Value = aURL
    oDoc = ThisComponent
   
    oDrawPages = oDoc.getDrawPages()
    oDrawPage = oDrawPages.getByIndex(0)
    if not isEmpty(oDrawPage.Background) then
       oGraphic = oDrawPage.Background.FillBitmap
       oShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
       oShape.Size = oGraphic.Size100thMM
       oShape.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
       oShape.FillBitmap = oGraphic
       oDrawPage.add(oShape)
       oExporter = createUnoService("com.sun.star.drawing.GraphicExportFilter")
       oExporter.SetSourceDocument( oShape)
       oExporter.Filter(aArgs)
       oShape.Dispose
    end if
End Sub
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
sgeulette
Fraîchement OOthentifié
Messages : 7
Inscription : 24 avr. 2012 13:34

Re: [Python] Export d'images de PPT sous Impress

Message par sgeulette »

Merci Jurassic Pork pour ta réponse.
J'ai transposé cela en python

Code : Tout sélectionner

outfilename = os.path.join(outdir, '%s_%03d.png' % (part1, i_nb))
img = page.Background.FillBitmap
out_url = uno.systemPathToFileUrl(outfilename)
shape = doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
shape.Size = img.Size100thMM
shape.FillStyle = BITMAP
shape.FillBitmap = img
mri(ctx, shape)
page.add(shape)
gef.setSourceDocument(shape)
params = [new_pv('MediaType', 'image/png'), new_pv('URL', out_url)]
gef.filter(params)
shape.dispose()
mais j'ai 2 problèmes:
  • l'image exportée est de bonne taille mais vide (comme l'exemple attaché)
  • la ligne "shape.dispose()" fait crasher LO
J'ai donc essayé directement la macro en basic mais j'ai exactement les 2 mêmes problèmes.
Cela ne fonctionne donc pas/plus avec la version 5.1.6.2 de LO sous Ubuntu.

Cette macro fonctionne-t-elle en LO 6 ? ou était-ce avec une version plus ancienne ?
Si quelqu'un peut essayer de son côté... ce serait sympa.

Bav
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 5.1.6 (Avec APSO et MRI) on ubuntu 16.04
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: [Python] Export d'images de PPT sous Impress

Message par Jurassic Pork »

hello,
bon j'ai fait un essai sous Lubuntu 16.04 avec LibreOffice 6.1 pas de crash. Par contre sous Centos 7.6 LibreOffice 5.4.3 crash comme toi et pas d"image.
En fait le code de la macro n'était pas bon ( déjà sous windows 10 l'image exportée présentait un défaut (un petit logo en haut à gauche).
dans la oShape il ne faut pas utiliser la propriété FillBitmap mais la propriété Graphic et pour enlever l'objet il ne faut pas faire un dispose mais faire un remove sur la drawpage.
Voici un code qui fonctionne maintenant chez moi sous windows 10 LibreOffice 6.1 et sous Centos 7.6 LibreOffice 5.4.3 :

Code : Tout sélectionner

Sub ExtraireFondImpress()
    Dim oDoc as Object
    Dim oGraphic as Object
    Dim oExporter as Object
    Dim oShape as Object
    Dim oDrawPages as Object, oDrawPage as Object
    Dim aURL As New com.sun.star.util.URL
    Dim aArgs(1) As New com.sun.star.beans.PropertyValue
rem    aURL.Complete  = ConvertToURL("/home/jurassic/export.png" )
    aURL.Complete  = ConvertToURL("M:\test\exportfond.png" )
    aArgs(0).Name = "MediaType"
    aArgs(0).Value = "image/png"
    aArgs(1).Name = "URL"
    aArgs(1).Value = aURL
    oDoc = ThisComponent
   
    oDrawPages = oDoc.getDrawPages()
    oDrawPage = oDrawPages.getByIndex(0)
    if not isEmpty(oDrawPage.Background) then
       oGraphic = oDrawPage.Background.FillBitmap
       oShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
       oShape.Size = oGraphic.Size100thMM
       oShape.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
       oShape.Graphic = oGraphic
       oDrawPage.add(oShape)
       oExporter = createUnoService("com.sun.star.drawing.GraphicExportFilter")
       oExporter.SetSourceDocument( oShape)
       oExporter.Filter(aArgs)
       oDrawPage.remove(oShape)
    end if
End Sub
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Python] Export d'images de PPT sous Impress

Message par Dude »

Plus simple à faire...
Enregistrer le document au format HTML.
Les images seront extraites automatiquement dans un répertoire éponyme.