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
.
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.