Dinamik verilerden otomatik olarak bir pdf raporu oluşturmak için reportlab kullanıyorum. İçerik bazen portre olarak görüntülenemeyecek kadar büyük olduğundan, büyük içerik için manzaraya geçmeye çalışıyorum. Benim rapor oluşturma şu şekilde çalışırReportlab: Portre ve manzara arasında nasıl geçiş yapılır?
geçerli:
Ana işlevi:
doc = DocTemplate(...) //Doctemplate is a customed BaseDocTemplate class
array = []
some_data= "Here is some data displayed in portrait"
array.append(Paragraph(some_data))
large_data = "this data is too large to be displayed in portrait"
array.append(Paragraph(large_data))
... // Some more data is added after this
doc.build(array, canvasmaker=NumberedCanvas)
Ne arıyorum ben yok gibi her adımda dikey konumdan yatay konuma geçiş yapabilmek için bir yoldur Görüntülemek için ihtiyaç duyulacak sayfa sayısını bilmiyorum. Ben hala raporlab için yeni ve python ile biraz, bu yüzden ben sonuna kadar tüm belgeyi oluştururken rapor raporları (PageTemplates, akışkanlar) tarafından sağlanan çözümleri nasıl kullanabileceğimi görmüyorum.
class DocTemplate(BaseDocTemplate,):
def __init__(self, filename, **kw):
apply(BaseDocTemplate.__init__, (self, filename), kw)
f = Frame(2.6*cm, 2.8*cm, 16*cm, 22.7*cm, id='f')
pt = PageTemplate('RectPage', [f], onPage=beforeDrawPage, onPageEnd=afterDrawPage)
//beforeDrawPage and afterDrawPage fill the headers of the page (that also need to be in landscape)
self.addPageTemplates(pt)
ben başka bir sayfa şablonu veya çerçeve eklemek zorundadır düşünüyorum, ama ben verilerine sırasında birinden diğerine geçiş yapabilirsiniz nasıl görmüyorum:
İşte benim diğer yararlı sınıfları bu durumda içindir ekleme aşaması.
class NumberedCanvas(canvas.Canvas):
def __init__(self, *args, **kwargs):
canvas.Canvas.__init__(self, *args, **kwargs)
self._saved_page_states = []
def showPage(self):
self._saved_page_states.append(dict(self.__dict__))
self._startPage()
def save(self):
"""add page info to each page (page x of y)"""
num_pages = len(self._saved_page_states)
for state in self._saved_page_states:
self.__dict__.update(state)
self.draw_page_number(num_pages)
canvas.Canvas.showPage(self)
self.setTitle("Title")
canvas.Canvas.save(self)
self._doc.SaveToFile(self._filename, self)
def draw_page_number(self, page_count):
self.setFont("Helvetica", 11)
self.drawRightString(18.5*cm, 26.8*cm,
"PAGE %d/%d" % (self._pageNumber, page_count))
Umarım açık bir şey unutmazdım.
Şimdiden çok teşekkürler.
'array'' story' – TNT