Voir les messages sans réponses | Voir les sujets actifs Nous sommes le 09 Avr 2020, 11:44



Répondre au sujet  [ 6 messages ] 
Planche d'étiquettes avec Scribus 
Auteur Message
Que quelqu'un le fasse taire!
Que quelqu'un le fasse taire!
Avatar de l’utilisateur

Inscription: 07 Nov 2005, 19:25
Messages: 935
Répondre en citant le message
Message Planche d'étiquettes avec Scribus
Bonjour,

on fait un journal, bon, Scribus, super. On a aussi des abonnés (pas assez d'ailleurs, cf. http://www.le-tigre.net/SAUVEZ-LE-TIGRE.html mais c'est une autre histoire...). Et pour ça on a besoin d'imprimer des planches d'étiquettes.

Pourquoi ne pas utiliser la base de données de Oo? Parce qu'elle ne marche pas très bien. Pourquoi ne pas se demander sur un forum ou une liste spéciale Oo? Parce que tout ce qui ne nous tue pas nous rend plus fort, et que si c'était possible avec Scribus, ce serait super.

L'idée c'est: on a une base, qu'on exporte disons en .csv, ou en .txt, peu importe, et par la magie d'un script python, ça nous crée, à partir de cette liste, des planches d'étiquettes avec des styles et tout et tout. Un peu comme le calendrier qui existe déjà.

Il faudrait que je poste ça sur la ML, mais en anglais je vais encore y passer 3 heures. Si déjà peux avoir l'avis de personnes qui connaissent Python (Fredd?) - l'idée c'est bien sûr de pouvoir rajouter la fonctionnalité à Scribus si ça marche...

Qu'en pensez-vous?

Raphael


17 Avr 2006, 18:03
Profil Site Internet
Bavardeur
Bavardeur

Inscription: 12 Oct 2004, 11:53
Messages: 110
Localisation: bzh
Répondre en citant le message
Message 
Voici un petit script fait rapidement, donc non testé exhaustivement.
Il manque la gestion des styles, qui n'est pas encore vraiment utilisable via les scripts (ou du moins pas documenté...). A défaut de mieux j'ai juste augmenté la taille de police pour le nom.

Il y a quelques paramètres à adapter directement dans le script (en attendant une belle interface pour ça, mais c'est plus long à faire :) ) :

les marges :
left_margin = 10
right_margin = 10
top_margin = 20
bottom_margin = 20

la taille et l'espacement entre les étiquettes :
label_width = 80
label_height = 30
horiz_space = 20
vert_space = 10

Le nombre d'étiquettes par ligne et par colonne sur 1 page :

labels_per_row = 2
labels_per_column = 6

Il faut également adapter ceci au format du fichier CSV; j'ai utilisé le format :
Mr;prénom;nom;adresse;code postal;ville
à partir desquels je crée les variables full_name,adress et zip_city


Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" This Script creates labels from csv file """

import csv
import sys

try:
    from scribus import *
except ImportError:
    print "This script only runs from within Scribus."
    sys.exit(1)


#margins in document unit, here mm
left_margin = 10
right_margin = 10
top_margin = 20
bottom_margin = 20
#Labels size and spacing (in same unit as document, here mm)
label_width = 80
label_height = 30
horiz_space = 20
vert_space = 10

#Number of labels per row/column
labels_per_row = 2
labels_per_column = 6

newDocument((210,297), (left_margin, right_margin, top_margin, bottom_margin), PORTRAIT, 1, UNIT_MILLIMETERS, NOFACINGPAGES, FIRSTPAGERIGHT)
setRedraw(False)

filename = fileDialog("Select a csv file to open", 'CSV files (*.csv *.txt)')
s = csv.Sniffer()
f = file(filename,'r')

data = f.readline()
f.seek(0)
csv_data = csv.reader(f, dialect = s.sniff(data))

x_offset = left_margin
y_offset = top_margin
x_label_counter=0
y_label_counter=0
for row in csv_data:
        #you can change these according to your csv file format
        full_name = row[0]+" "+row[1]+" "+row[2]
        address = row[3]
        zip_city = row[4]+" "+row[5]
        #
        label = createText(x_offset,y_offset, label_width, label_height)
        setTextAlignment(ALIGN_CENTERED, label)
        insertText(full_name+"\n",-1,label)
        selectObject(label)
        selectText(0,len(full_name)+1)
        setFontSize(getFontSize()+2)
        insertText(address+"\n",-1,label)
        insertText(zip_city,-1,label)
        x_label_counter+=1
        if x_label_counter == labels_per_row:
                x_label_counter = 0
                x_offset = 0
                y_label_counter+=1
                if y_label_counter == labels_per_column:
                        newPage(-1)
                        #gotoPage(currentPage()+1)
                        y_label_counter = 0
                        y_offset = 0
        x_offset = x_label_counter * ( label_width + horiz_space ) + left_margin
        y_offset = y_label_counter * ( label_height + vert_space ) + top_margin

setRedraw(True)
redrawAll()



18 Avr 2006, 15:50
Profil
Que quelqu'un le fasse taire!
Que quelqu'un le fasse taire!
Avatar de l’utilisateur

Inscription: 07 Nov 2005, 19:25
Messages: 935
Répondre en citant le message
Message 
Ouaah!

Merci Fred, ça c'est sympa...

Bon maintenant les problèmes arrivent parce que je suis bien largué en Python. J'ai réussi à adapter à mon nombre de colonnes (10), mais ça coince ligne 56:

Code:
Traceback (most recent call last):
  File "<string>", line 9, in ?
  File "/home/rm/.scribus/scripts/etiket.py", line 56, in ?
    selectText(0,len(full_name)+1)
IndexError: Index de la sélection hors limites


Any ideas? (Je vais jeter un coup d'oeil sur l'IRC voir si tu es là-bas).

En tout cas, merci 1000 fois... J'espère que ça va marcher... (Tiens, d'ailleurs, comment faire pour rendre un script permanent, qu'il soit à côté de Font, Calendar & Co?)

Raphael


18 Avr 2006, 16:51
Profil Site Internet
Que quelqu'un le fasse taire!
Que quelqu'un le fasse taire!

Inscription: 27 Déc 2004, 01:57
Messages: 901
Localisation: Brest, Dijon
Répondre en citant le message
Message 
Peut-être un +1 à changer en -1 ? (Ça peut être une typo de ce genre, je n'ai pas regardé plus en détail.)


18 Avr 2006, 17:36
Profil Site Internet
Bavardeur
Bavardeur

Inscription: 12 Oct 2004, 11:53
Messages: 110
Localisation: bzh
Répondre en citant le message
Message 
+1 devrait fonctionner, mais en fait avec le recul il ne sert à rien (le caractère en plus est le retour chariot). Donc il est possible de le supprimer

Quelle version de Scribus utilises-tu ? L'API change souvent, et je ne l'ai testé qu'avec la version 1.3.3.


18 Avr 2006, 17:45
Profil
Que quelqu'un le fasse taire!
Que quelqu'un le fasse taire!
Avatar de l’utilisateur

Inscription: 07 Nov 2005, 19:25
Messages: 935
Répondre en citant le message
Message 
On fait des essais, et on revient sur le forum quand on aura quelque chose qui fonctionne...


18 Avr 2006, 20:22
Profil Site Internet
Afficher les messages postés depuis:  Trier par  
Répondre au sujet   [ 6 messages ] 

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Forum style by ST Software for PTF.
Traduction par: phpBB-fr.com