[Résolu] [Writer] Publipostage étiquettes avec images

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 !

[Résolu] [Writer] Publipostage étiquettes avec images

Messagepar Rabi_85 » 09 Oct 2018 21:17

Bonjour,

J'ai réussi à utiliser le suprême de code Pys Publipostage avec un document writer vierge mais je n'arrive pas à le faire fonctionner sur une page contenant 12 étiquettes car c'est limité à un formulaire par document.
Je recherche quelqu'un qui pourrait modifier cette macro car c'est hors de mes compétences.

Merci d'avance.

La modération a écrit:Lien de référence : Publipostage avec images
Dernière édition par Rabi_85 le 16 Oct 2018 20:44, édité 9 fois.
OpenOffice Version: 6.0.6.2 sous Ubuntu 18.04 LTS
Rabi_85
Fraîchement OOthentifié
 
Message(s) : 3
Inscrit le : 09 Oct 2018 21:00

Re: [Writer] Publipostage avec image

Messagepar Hubert Lambert » 15 Oct 2018 19:21

Bonjour,

Il est possible de modifier "à la volée" les documents générés par publipostage, par exemple pour remplacer une champ texte contenant l'url de l'image par un contrôle picto associé à cette url.
Mais pour avancer, ce serait plus simple de disposer d'un échantillon de ta base (sans données personnelles) et un exemple du fichier d'étiquettes.
Cordialement.
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1108
Inscrit le : 06 Avr 2016 08:26

Re: [Writer] Publipostage avec image

Messagepar Rabi_85 » 15 Oct 2018 19:54

Bonsoir,

Ci-joint un exemple. J'ai insérer un contrôle picto afin d'utiliser la macro de Pys Publipostage mais elle ne fonctionne pas avec ma page qui contient 12 étiquettes.
Pièces jointes
Publipostage.zip
(237.13 Kio) Téléchargé 22 fois
OpenOffice Version: 6.0.6.2 sous Ubuntu 18.04 LTS
Rabi_85
Fraîchement OOthentifié
 
Message(s) : 3
Inscrit le : 09 Oct 2018 21:00

Re: [Writer] Publipostage avec image

Messagepar Hubert Lambert » 16 Oct 2018 11:09

Merci. Ci-joint un exemple de ce qu'il est possible de faire.
Le principe est le suivant :
- on insère le champ "url" dans le tout premier paragraphe de l'étiquette, qui ne doit rien contenir d'autre;
- on insère un contrôle picto vide dans chaque étiquette;
- au moment de la génération du document, on insère le texte du premier paragraphe dans le champ "ImageURL" du contrôle et on efface le texte.

Le fichier est généré dans le répertoire du modèle.

Le tout peut évidemment être adapté plus finement.

Le code est dans le document modèle. La macro à lancer est publipostage_images :
Code : Tout sélectionner   AgrandirRéduire
sub publipostage_images
    doc = thiscomponent
    fieldmasters = doc.TextFieldMasters
    for each fieldname in fieldmasters.ElementNames
        field = fieldmasters.getByName(fieldname)
        if field.supportsService("com.sun.star.text.fieldmaster.Database") then
            exit for
        end if
    next fieldname
   
    mailmerge = createUnoService("com.sun.star.text.MailMerge")
    mailmerge.DocumentURL = doc.URL
    mailmerge.DataSourceName = field.DatabaseName
    mailmerge.Command = field.DataTableName
    mailmerge.CommandType = com.sun.star.sdb.CommandType.TABLE
    mailmerge.OutputType = com.sun.star.text.MailMergeType.FILE
    mailmerge.OutputURL = replace(doc.url, doc.Title, "")
    mailmerge.SaveAsSingleFile = True

    mailmergelistener = createUnoListener("MM_", "com.sun.star.text.XMailMergeListener")
    mailmerge.addMailMergeEventListener(mailmergelistener)

    mailmerge.execute(array())
    print "Terminé."
end sub

sub MM_notifyMailMergeEvent(event)
    model = event.Model
    cadres = model.TextFrames
    form = model.DrawPage.Forms(0)
    for n = 0 to cadres.Count -1
        cadre = cadres(n)
        para1 = cadre.createEnumeration().nextElement()
        if para1.String <> "" then
            control = form.getByIndex(n)
            control.ImageURL = convertToURL(para1.String)
            para1.setString("")
        end if
    next n
end sub

Deux petites remarques :
1. si les images sont dans le même répertoire que le modèle, le nom du fichier suffira, pas besoin du chemin complet (remplacer dans le code la ligne "control.ImageURL = convertToURL(para1.String)" par "control.ImageURL = para1.String");
2. n'attends pas des performances extraordinaires de cette macro en terme de vitesse :wink: .

Cordialement.
Pièces jointes
PublipostageImage.odt
(15.23 Kio) Téléchargé 26 fois
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1108
Inscrit le : 06 Avr 2016 08:26

Re: [Writer] Publipostage avec image

Messagepar Rabi_85 » 16 Oct 2018 17:35

Cela répond exactement à ma problématique. Cette macro peut servir à faire un trombinoscope, des cartes de membres...
Merci beaucoup d'avoir pris du temps!
OpenOffice Version: 6.0.6.2 sous Ubuntu 18.04 LTS
Rabi_85
Fraîchement OOthentifié
 
Message(s) : 3
Inscrit le : 09 Oct 2018 21:00

Re: [Résolu] [Writer] Publipostage avec image

Messagepar Hubert Lambert » 16 Oct 2018 18:53

Merci aussi.
Ce qui serait vraiment bien, ce serait de préciser le titre, quelque chose comme "Publipostage étiquettes avec images" :wink: .
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1108
Inscrit le : 06 Avr 2016 08:26


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 5 invité(s)