title: Reportlab : How to switch between portrait and landscape?
body: <p>I am using reportlab to generate a pdf report automatically from dynamic data. As the content sometimes is too large to be displayed in portrait, I am trying to switch to landscape for large content.</p>
  
  <p>Here is how my report generation works :</p>
  
  <p>Main function :</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>What I am looking for is a way to be able to switch from portrait to landscape at each step, as I don't know the number of pages that will be needed to display it. I am still new to reportlab and even a bit with python, so I do not see how I can use the solutions provided by reportlab (PageTemplates, flowables) properly as I am building the whole document at the end.</p>
  
  <p>Here are my other useful classes for this case :</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>I think I shall add another page template or frame, but I don't see how i can switch from one to the other during the data appending phase.</p>
  
  <pre><code>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))
  </code></pre>
  
  <p>I hope I did'nt forgot anything to be clear.</p>
  
  <p>Many thanks in advance.</p>