【问题标题】:Throw blank even-numbered/left pages抛出空白的偶数/左页
【发布时间】:2012-06-23 22:39:33
【问题描述】:

我正在尝试使用 ReportLab 和 Python 2.7 排版大型文档。

它有多个部分(在 1,000 页的文档中大约有 6 个部分),我希望每个部分都从奇数页/右侧页开始。我不知道前一页是奇数还是偶数,因此需要能够在特定段落样式之前选择性地抛出一个额外的空白页(就像您有时会在手册中看到某些页面“故意留空”)。任何人都可以建议如何做到这一点,因为我能找到的唯一有条件的分页符是基于页面上的文本数量而不是页码。

我还需要确保 PDF 中包含空白页,以便进行双面打印。

【问题讨论】:

    标签: python pdf-generation reportlab


    【解决方案1】:

    如果您可以跟踪页码,则只需在适当的时间添加 PageBreak 或 canvas.showPage() 命令。

    【讨论】:

      【解决方案2】:

      如果您在 reportlab 中使用 platypus 引擎,您可以尝试覆盖 BaseDocTemplate 类并使用 afterPagebeforePage 挂钩来跟踪页码。然后你可以在遇到偶数页时使用 showPage()。

      例如:

      from reportlab.platypus import BaseDocTemplate
      from reportlab.lib.pagesizes import A4
      from reportlab.platypus import PageTemplate
      
      class MyDocTemplate(BaseDocTemplate):
          """Override the BaseDocTemplate class to split even/odd pages"""
      
          def __init__(self, *args, **kwargs):
              BaseDocTemplate.__init__(self, *args, **kwargs)
              self.__pageNum = 1
      
          def afterPage(self):
              """Called after all flowables have been drawn on a page"""
      
              # Increment pageNum since the page has been completed
              self.__pageNum += 1
      
          def beforePage(self):
              """Called before any flowables are drawn on a page"""
      
              # If the page number is even, force a page break
              if self.__pageNum % 2 == 0:
                  self.canv.showPage()
                  # Increment pageNum again since we've added a blank page
                  self.__pageNum += 1
      

      然后您可以使用新的MyDocTemplate 类来创建您的文档:

      if __name__ == "__main__":
      
          doc = MyDocTemplate(
              'filename.pdf',
              pagesize=A4,
              rightMargin=.3*inch,
              leftMargin=.3*inch,
              topMargin=.3*inch, 
              bottomMargin=.3*inch
          )
      
          # Your flowables go here
          elements = []
      
          # Your PageTemplates go here
          doc.addPageTemplates([])
      
          doc.build(elements)
      

      【讨论】:

        猜你喜欢
        • 2011-03-05
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 2021-05-11
        • 2016-05-01
        • 2011-10-20
        • 1970-01-01
        • 2015-11-09
        相关资源
        最近更新 更多