IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

reportlab et les tableaux


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 12
    Points
    12
    Par défaut reportlab et les tableaux
    Bonjour,
    Je découvre reportlab et j'ai quelques pb.
    j'ai placé un tableau(l'ébauche pour l'instant) sous une image.
    comment faire pour que ce tableau s'étende vers le bas et pas vers l'image du haut car le nombre de données recupérées pour ce tableau dans la db est très variable?
    Puis-je faire déborder ce tableau sur la page suivante?
    A quoi sert exactement la méthode wrapOn()?
    Merci d'avance car j'ai beaucoup de mal avec la doc reportlab.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    import PIL
    from reportlab.pdfgen.canvas import Canvas
    from PyDbLite import Base
     
    from reportlab.lib import colors
    from reportlab.lib.units import cm
    from reportlab.lib.pagesizes import A4
    from reportlab.platypus import Paragraph, SimpleDocTemplate,Table, TableStyle
     
     
     
    class Report:
        "mise en place du rapport"
        def __init__(self,liste_vues,reg):
            self.reg=reg
            self.liste_vues=liste_vues
     
            db=Base(self.reg)
            db.open()
     
            db1=Base('acr_reg')
            db1.open()
            t=[r['type'] for r in db1 if r['reg']==self.reg]
            self.acr_type=t[0]
            print t
     
     
            c=Canvas(self.reg+".pdf")
            print self.acr_type
     
     
            for r in self.liste_vues:
                c.drawImage(self.acr_type+'\\'+r+'.gif',100,350,350,350)
                self.liste=[r1 for r1 in db if r1['vue']==r]
                print self.liste
                for r1 in self.liste:
                    self.posx=r1['x']
                    self.posy=r1['y']
                    self.nbr=r1['num']
     
                    self.posx1=100+((self.posx*350)/600)
                    self.posy1=700-((self.posy*350)/600)
                    c.setFillColorRGB(0,0,0)
     
                    c.rect(self.posx1-4,self.posy1-4,8,8,fill=1)
                    c.setFillColorRGB(255,255,255)
                    self.num=int(self.nbr)
                    self.num=str(self.nbr)
                    if self.nbr<10:
     
                        c.setFont("Helvetica",8)
                        c.drawString(self.posx1-2,self.posy1-3,self.num)
     
                    else:
                        c.setFont("Helvetica",8)
                        c.drawString(self.posx1-5,self.posy1-3,self.num)
     
                data=[('Item Nbr','Description','Location','Report Date','Manual Ref','Repair Interval','Insp Interval'),]
                for r2 in self.liste:
     
                    liste2=[r2['num'],r2['Description'],r2['location'],r2['date'],r2['doc'],r2['repair_int'],r2['insp_int']]
                    data.append(liste2)
     
                print data                
                t=Table(data)
                w,h = t.wrapOn(c,2000)
                t.drawOn(c,70,250)
     
     
     
     
                c.showPage()
            c.save()

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut Utiliser platypus de A à Z
    Salut,

    Désolé pour le délai de réponse. J'ai décidé de consacrer un peu de mon temps
    à répondre à des post sans réponse.

    Le principe est ici d'écrire une histoirehistoire constituée d'un certain
    nombre d'élément flottants ?

    kéksèksa ?

    Un flottant (flowable dans la treminologie platypus) est un élément de document image, tableau ... que platypus placera lui-même sur la page à partir d'indications générales. L'histoire est une simple liste de flottants.
    Un tout petit exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from reportlab.platypus import BaseDocTemplate, SimpleDocTemplate, PageTemplate, Frame, Paragraph, Spacer, PageBreak, Table, TableStyle, CondPageBreak, Image, ParagraphAndImage
    from reportlab.lib.pagesizes import A4
    from reportlab.lib.units import cm
    from reportlab.lib import colors
    from reportlab.lib.styles import ParagraphStyle as PS
    from reportlab.lib.enums import TA_CENTER, TA_LEFT,TA_RIGHT,TA_JUSTIFY
    def main():
        story =  []
        story.append(Image(
            'monimage.png',
            width = 4*cm,
            heught = 5*cm))
        story.append(Spacer(1,0.5*cm)) # Insère un espacement de 0,5 cm
        story.append(Pararagraph(
            u"Voyez le tableau ci dessous", # Le texte du paragraphe peut contenir des balises xhtml
            PS(
                name = 'CORPS',
                fontName='Helvetica',
                fontSize=11,
                alignment = TA_LEFT,
                # etc il y beaucoup de possibilité
            )))
        story.append(Spacer(1,0.5*cm)) # Insère un espacement de 0,5 cm
        data = [
            (u"Chocolats","18 barres"),
            (u"Thé","3 boîtes")]
     
        story.append(Table(tdat)) # Si la table est très longue elle s'étendra toute seule sur les autres pages
        doc = SimpleDocTemplate("monfichier.pdf")
        doc.build(story) # Le document est, en fait généré ici
     
     
    if __name__ == '__main__':
        main()
    Il y a encore beaucoup de chose que platypus peut faire pour toi.
    Il est hors de question de les détailler ici.

    Bientôt, je ferai un petit tutoriel à ce sujet

    En espérant t'avoir été utile

  3. #3
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Points : 152
    Points
    152
    Par défaut
    Petit bug de saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        story.append(Image(
            'monimage.png',
            width = 4*cm,
            height = 5*cm))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        story.append(Pararagraph(
            u"Voyez le tableau ci dessous", # Le texte du paragraphe peut contenir des balises xhtml
            PS(
                name = 'CORPS',
                fontName='Helvetica',
                fontSize=11,
                alignment = TA_LEFT,
                # etc il y beaucoup de possibilité
            )))
    cette partie renvoie
    NameError: name 'Pararagraph' is not defined

Discussions similaires

  1. Mais pourquoi ... Avec IE les tableaux sont décentrés ?
    Par nebule dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/11/2004, 10h04
  2. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  3. Réponses: 14
    Dernier message: 01/09/2003, 22h46
  4. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo