Reportlab: Wie wechsle ich zwischen Hoch- und Querformat?

Ich bin mit reportlab generieren eines pdf-Berichts automatisch von dynamischen Daten. Der Inhalt ist manchmal zu groß für die Anzeige im hochformat, ich bin versucht zu wechseln, um die Landschaft für die großen Inhalte.

Hier ist, wie mein Bericht-generation arbeitet :

Main-Funktion :

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)

Was ich Suche, ist ein Weg, um in der Lage sein, wechseln Sie von hochformat zu Querformat bei jedem Schritt, da ich nicht weiß, die Anzahl der Seiten, die benötigt werden, um es anzuzeigen. Ich bin noch neu auf reportlab und sogar ein bisschen mit python, also ich sehe nicht, wie ich verwenden können die Lösungen von reportlab (PageTemplates, flowables) richtig, wie Baue ich das gesamte Dokument am Ende.

Hier sind meine andere nützliche Klassen für diesen Fall :

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)

Ich glaube, ich werde hinzufügen einer anderen Seite Vorlage oder Rahmen, aber ich sehe nicht, wie kann ich wechseln von einer auf die andere während Sie die Daten anfügen phase.

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))

Ich hoffe, dass ich did ' NT vergaß alles klar zu sein.

Vielen Dank im Voraus.

InformationsquelleAutor der Frage Mathieu C. | 2011-05-06

Schreibe einen Kommentar