Форум сайта python.su
А не кто не в курсе такой проблемы:
задача сгенерить многостраничный pdf документ содержащий кучу таблиц
Пытался сделать двумя способами
способ первый
pdf = SimpleDocTemplate(pagesize = letter,filename='document.pdf')
my_table=Table(data,style=[
('SPAN', (0,0), (0,coor_x)),
('VALIGN',(0,0),(0,0),'CENTER')
])
story.append(table)
pdf.build(story)
все шикарно работает
но только с одной страницей
как сделать разрыв страницы что бы следующая таблица была на новой таблице так и не вкурил :(
подскажите плс
способ второй
MyCanvas = canvas.Canvas(sys.argv+“.pdf”)
my_table=Table(data,style=[
('SPAN', (0,0), (0,coor_x)),
('VALIGN',(0,0),(0,0),'CENTER')
])
и вот дальше начинаются не понятки
если я в лоб дам
my_table.drawOn(MyCanvas,100,580)
]
то получу
Traceback (most recent call last):
File “file.py”, line 249, in <module>
my_table.drawOn(MyCanvas,100,780)
File “/usr/lib/python2.5/site-packages/reportlab/platypus/flowables.py”, line 102, in drawOn
self._drawOn(canvas)
File “/usr/lib/python2.5/site-packages/reportlab/platypus/flowables.py”, line 86, in _drawOn
self.draw()#this is the bit you overload
File “/usr/lib/python2.5/site-packages/reportlab/platypus/tables.py”, line 1168, in draw
cellRect = self._spanRects
AttributeError: Table instance has no attribute ‘_spanRects’
но если я где то ранее создам объект SimpleDocTemplate
и свою таблицу предвариетльно пропущу через конструкцию
story.append(my_table)
pdf.build(story)
то все пролетает на ура
в чем грабли тут я не вкурил
сам объект таблицы (точнее его содержимое) после build становится в два раза больше
как преобразовать таблицу что бы drawOn хавал ее на ура?
заранее спасибо
подскажите плс
Офлайн
swift, а тебе pisa не подойдет?
Офлайн
pythonwinспасибо за ссылку
Офлайн
swiftдоки хватает для старта, но потом нужно
(хотя хуже доке чем под репортлаб я еще не встречал :))
Офлайн
а что за story если не секрет?
а таблицу как и любого потомка flowables надо на части резать прежде чем на страницу пихать..
и кстати этот момент в документации прекрасно отражен.
Офлайн
RDXпросто массив, состоящий из элементов pdf файла
а что за story если не секрет?
RDXткните носом плс :)
а таблицу как и любого потомка flowables надо на части резать прежде чем на страницу пихать..
и кстати этот момент в документации прекрасно отражен.
Офлайн
RDXа как ты предлагаешь это делать?
а таблицу как и любого потомка flowables надо на части резать прежде чем на страницу пихать..
Офлайн
в репортлабовском юзергайде
5.3 Flowables
Flowables are things which can be drawn and which have wrap, draw and perhaps split methods.
Flowable is an abstract base class for things to be drawn and an instance knows its size and draws in its
own coordinate system (this requires the base API to provide an absolute coordinate system when the
Flowable.draw method is called). To get an instance use f=Flowable().
It should be noted that the Flowable class is an abstract class and is normally only used as a base class.
To illustrate the general way in which Flowables are used we show how a derived class Paragraph is
used and drawn on a canvas. Paragraphs are so important they will get a whole chapter to themselves.
from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import Paragraph from reportlab.pdfgen.canvas import Canvas styleSheet = getSampleStyleSheet() style = styleSheet['BodyText'] P=Paragraph('This is a very silly example',style) canv = Canvas('doc.pdf') aW = 460 # available width and height aH = 800 w,h = P.wrap(aW, aH) # find required space if w<=aW and h<=aH: P.drawOn(canv,0,aH) aH = aH - h # reduce the available height canv.save() else: raise ValueError, "Not enough room"
Flowable.draw()
Flowable.drawOn(canvas,x,y)
Flowable.wrap(availWidth, availHeight)
Flowable.split(self, availWidth, availheight)
Отредактировано (Май 6, 2008 07:31:36)
Офлайн