2011-06-16 5 views
0

J'essaye de faire un pdf simple avec 2 diagrammes conscients de données. L'un est un graphique à barres qui prend des données de la table 1 et l'autre est une chaîne (zone de texte genre de chose) qui obtient ses données d'une autre table. Lorsque j'exécute ce programme dans reportlab, la partie de chaîne (classe qui a le code pour connecter la chaîne à la base de données et l'afficher) qui est appelée plus tard écrase le diagramme de diagramme à barres. Je ne trouve aucun moyen d'afficher les deux ensemble en un seul pdf. Veuillez nous suggérer.deux diagrammes sensibles aux données en un pdf dans reportlab

de rlextra.graphics.guiedit.datacharts importer DataAwareDrawing, ODBCDataSource, DataAssociation
de reportlab.graphics.charts.barcharts importer VerticalBarChart3D
de reportlab.graphics.shapes importer _DrawingEditorMixin, ligne, String
de reportlab.lib .colors importation rouge
de reportlab.lib.pagesizes importer lettre
de SimpleDocTemplate import reportlab.platypus, paragraphe, Spacer, image
de reportlab.lib.styles importer getSampleStyleSheet, ParagraphStyle
de reportlab.lib.enums importer TA_JUSTIFY
de reportlab.lib.pagesizes importer lettre
de SimpleDocTemplate import reportlab.platypus, paragraphe, Spacer, Image
de reportlab.lib.styles importer getSampleStyleSheet, ParagraphStyle
de reportlab. lib.units importer pouces

classe avg_max_min (_DrawingEditorMixin, DataAwareDrawing):
def initialisation (self, largeur = 1 000, hauteur = 1000, args, * kw):
DATAA wareDrawing. initialisation (self, largeur, hauteur, args, * kw)
self._add (self, ligne (750.900.900.900), name = 'horline1', valider = None, desc = None)
self._add (self, Line (750,930,900,930), name = 'horline2', valider = Aucun, desc = Aucun)
self._add (self, Line (750,960,900,960), nom = 'horline3', valider = Aucun, desc = Aucun)
self._add (self, Line (750,900,750,960), name = 'verline1', valider = aucun, desc = aucun)
self._add (self, Line (800,900,800,960), name = 'verline2', valider = Aucun, desc = Aucun)
self._add (self, Line (850,900,850,960), nom = 'verline3', valider = aucun, desc = aucun)
self._add (auto, ligne (900.900.900.960), name = 'verline4', valider = Aucun, desc = Aucun)
self._add (self, String (760945, 'moyenne'), name = 'label1', valider = None, desc = None)
self.label1.fontSize = 8
self.label1.fillColor = rouge
self.label1.textAnchor = 'start'
self._add (self, String (810.945, » minimum '), name =' label2' , valider = Aucun, desc = Aucun)
self.label2.fillColor = rouge
self.label2.fontSize = 8
self.label2.textAnchor = 'start'
self._add (self, String (860945, 'Maximum'), name = 'label3', valider = Aucun, desc = Aucun)
self.label3.fillColor = rouge
auto.label3.fontSize = 8
self.label2.textAnchor = 'start'
self._add (self, String (760915, 'text'), name = 'label4', valider = Aucun, desc = Aucun)
auto ._add (self, String (810,915, 'text'), nom = 'label5', valider = Aucun, desc = Aucun)
self._add (self, String (860,915, 'text'), name = 'label6' , valider = None, desc = None)

self.dataSource  = ODBCDataSource() 
    self.dataSource.driver     = 'mysql' 
    self.dataSource.name      = 'view' 
    self.dataSource.user      = 'root' 
    self.dataSource.password     = 'sou' 
    self.dataSource.sql      = 'select cast(avg(diff) as char(50)), cast(min(diff) as char(50)),cast(max(diff) as char(50)) from new_table' 
    self.dataSource.associations.size  = 3 
    self.dataSource.associations.element00 = DataAssociation(column=0, target='label4.text', assocType='scalar') 
    self.dataSource.associations.element01 = DataAssociation(column=1, target='label5.text', assocType='scalar') 
    self.dataSource.associations.element02 = DataAssociation(column=2, target='label6.text', assocType='scalar') 

classe final_logon (_DrawingEditorMixin, DataAwareDrawing):
def initialisation (self, largeur = 1 000, hauteur = 1000, args, * kw):
DataAwareDrawing. initialisation (self, largeur, hauteur, args, * kw)
self._add (self, VerticalBarChart3D(), name = 'verticale', valider = None, desc = None)
self.vertical.x = 150
self.vertical.y = 200
self.vertical.width = 600
self.vertical.height = 600
self.dataSource = ODBCDataSource()
self.dataSource.driver = 'mysql'
self.dataSource.name = 'view'
self.dataSource.user = 'root'
self.dataSource.password = 'sou'
self.dataSource.sql = 'select id, range_value, user_number de final_logon'
self.dataSource.associations.size = 3
self.dataSource.associations.element00 = DataAssociation (colonne = 0, cible = 'verticalId', assocType = 'scalaire')
self.dataSource.associations.element02 = DataAssociation (colonne = 1, cible = 'vertical.categoryAxis .categoryNames ', assocType =' vector ')
self.dataSource.associations.element01 = DataAssociation (colonne = 2, target =' vertical.data ', assocType =' tmatrix ')

doc = SimpleDocTemplate ("merged.pdf", pagesize = lettre, rightMargin = 72, leftMargin = 72, topmargin = 72, BottomMargin = 18)
histoire = []

Story.append (avg_max_min() .go())
Story.append (final_logon() go())
doc.build (histoire)

d'erreur que je reçois.
C: \ Python26 \ être fusionné> merged.py
retraçage (appel le plus récent en dernier):
fichier "C: \ Python26 \ à fusionner \ merged.py", ligne 96, dans
doc.build (histoire)
fichier « C: \ Python26 \ lib \ site-packages \ reportlab \ ornithorynque \ doctemplate.py "ligne 1
117, dans la construction
BaseDocTemplate.build (self, les suspensions, canvasmaker = canvasmaker)
fichier" C: \ Python26 \ lib \ site-packages \ reportlab \ platypus \ doctemplate.py ", ligne 8
80, dans la construction
auto.handle_flowable (flowables)
fichier "C: \ Python26 \ lib \ site-packages \ reportlab \ ornithorynque \ doctemplate.py", à la ligne 7
44, dans handle_flowable
self.handle_keepWithNext (flowables)
fichier « C: \ Python26 \ lib \ site-packages \ reportlab \ ornithorynque \ doctemplate.py », ligne 7
11, dans handle_keepWithNext
alors que je AttributeError: objet 'NoneType' n'a pas d'attribut 'getKeepWithNext'

+0

Va probablement avoir besoin de voir du code. On dirait que c'est probablement un problème avec la façon dont vous dessinez sur la toile. –

+0

Je n'utilise pas une toile ... plutôt 2 classes une pour chaque diagramme et en les appelant dans la main ... – Compuser7

Répondre

0

paradis I » J'ai travaillé avec le module rlextra avant, mais ce qui se passe est que, pour autant que je sache, aucune partie de ReportLab est vraiment conçu pour s'ajouter à un fichier existant. Au lieu de ce que vous devez faire est de générer ces deux images (si vous voulez éviter de les écrire dans un fichier réel, pensez à utiliser StringIO), puis les dessiner ensemble sur un seul canevas.

Questions connexes