[go: up one dir, main page]

Menu

[599fc9]: / sqlutil / pdfreport.py  Maximize  Restore  History

Download this file

100 lines (92 with data), 3.7 kB

 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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame
from reportlab.lib.units import mm
from StringIO import StringIO
#import sys
import sys, os.path as osp
def libpath( libname ):
base = osp.dirname( osp.dirname( osp.abspath( __file__ ) ) )
#base = osp.dirname( osp.dirname( __file__ ) )
#base = osp.dirname( osp.abspath( __file__ ) )
lib = osp.join( base, libname )
#head, tail = osp.split( base )
#if tail == 'site-packages': # TEST
# lib = osp.join( base, libname )
#elif tail == 'contpdf': # TEST
# lib = osp.join( osp.dirname( base ), libname )
#else:
# lib = osp.join( base, libname )
# s/contweb/contweb/contpdf/sqlutil/pdfreport.py ---> s/contweb
# in online installato
# s/contweb/contweb/sqlutil/pdfreport.py ---> s/contweb
# base = osp.dirname( osp.dirname( nfile ) )
#lib = osp.join( base, libname )
#print __file__, base, lib
# if not osp.isdir( static ):
# base = osp.join( osp.join( sys.prefix, 'share' ), appname )
# static = osp.join( base, 'static' )
# print base, lib
return lib
class pdfpage (PageTemplate):
''' template per pagine di report calcistico
--------- header ---------------------------------
logo riga 1
logo riga 2
--------------------------------------------------
spazio per flowables
'''
def __init__( self, id, psize ):
xm = 10*mm # margine (destro = sinistro)
xt = psize[0] - xm*2 # larghezza frame testo
yh = (20*mm,10*mm)[psize[0] > psize[1]] # altezza dell'header
ytm = yh + 4*mm # margine alto
ybm = 10*mm # margine basso
yt = psize[1] - (ytm + ybm) # altezza frame testo
yp = (ytm - yh) / 2
self.hpos = ( xm, psize[1] - yh - yp )
self.hdim = ( yh * 1.4, yh )
body = Frame( xm, ybm, xt, yt, id='body' )
PageTemplate.__init__( self, id, [body], pagesize=psize )
def getlogo( self, dbname=None ): return None
def gettitle( self, dbname=None ): return 'APDF', ''
def beforeDrawPage( self, canvas, doc ):
canvas.saveState()
ln = self.getlogo( getattr( doc, 'dbname', None ) )
xt = self.hpos[0] + self.hdim[0] + 5*mm
if ln: canvas.drawImage( ln, self.hpos[0], self.hpos[1], self.hdim[0], self.hdim[1] )
title = self.gettitle( getattr( doc, 'dbname', None ) )
if doc.pagesize[0] > doc.pagesize[1]: # landscape
t = (title[0] or '') + ' - ' + (title[1] or '')
yt = self.hpos[1] + ((self.hdim[1] - 20) / 2)
canvas.setFont( 'Times-Roman', 16, 20 )
canvas.drawString( xt, yt, t )
else:
if title[0]:
canvas.setFont( 'Times-Bold', 20, 24 )
canvas.drawString( xt, self.hpos[1] + self.hdim[1] / 2, title[0] )
if title[1]:
canvas.setFont( 'Times-Roman', 12, 14 )
canvas.drawString( xt, self.hpos[1], title[1] )
canvas.restoreState()
class pdfreport (BaseDocTemplate):
def __init__( self, filename, **kw ):
BaseDocTemplate.__init__( self, filename, **kw )
self.author = 'reportlab'
self.dbname = None
def make( self, crs, dbname=None ):
''' costruisce il documento '''
if dbname: self.dbname = dbname
lflow = self.getstory( crs )
# attenzione occorre gestire anche multiBuild
#print lflow
return self.build( lflow )
def makestr( self, crs, dbname=None ):
if dbname: self.dbname = dbname
lflow = self.getstory( crs )
fd = StringIO()
self.build( lflow, fd )
s = fd.getvalue()
fd.close()
return s
def getstory( self, crs ):
''' ritorna l'elenco dei flowables che compongono il documento '''
return list()