[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 !
Rabi_85
Fraîchement OOthentifié
Messages : 7
Inscription : 09 oct. 2018 20:00

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

Message par Rabi_85 »

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 vous a écrit: Lien de référence : Publipostage avec images

Dernière modification par Rabi_85 le 16 oct. 2018 19:44, modifié 9 fois.
OpenOffice Version: 6.0.6.2 sous Ubuntu 18.04 LTS
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Writer] Publipostage avec image

Message par Hubert Lambert »

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.7 sur Win10
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)
Rabi_85
Fraîchement OOthentifié
Messages : 7
Inscription : 09 oct. 2018 20:00

Re: [Writer] Publipostage avec image

Message par Rabi_85 »

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.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice Version: 6.0.6.2 sous Ubuntu 18.04 LTS
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Writer] Publipostage avec image

Message par Hubert Lambert »

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

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.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
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)
Rabi_85
Fraîchement OOthentifié
Messages : 7
Inscription : 09 oct. 2018 20:00

Re: [Writer] Publipostage avec image

Message par Rabi_85 »

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
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

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

Message par Hubert Lambert »

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.7 sur Win10
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)