抛出空白偶数页/左页

时间:2012-06-21 16:22:15

标签: python pdf-generation reportlab

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您在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)