Выбрасывать пустые четные/левые страницы

Я пытаюсь набрать большой документ, используя ReportLab и Python 2.7.

В нем есть несколько разделов (около 6 в документе на 1000 страниц), и я хотел бы, чтобы каждый начинался с нечетной/правой страницы. Я понятия не имею, будет ли предыдущая страница нечетной или четной, и поэтому мне нужна возможность добавить дополнительную пустую страницу перед определенным стилем абзаца (как вы иногда получаете в руководствах, где некоторые страницы «намеренно оставлены пустыми»). Может ли кто-нибудь предложить, как это можно сделать, поскольку единственный условный разрыв страницы, который я могу найти, работает на основе количества текста на странице, а не номера страницы.

Мне также нужно убедиться, что пустая страница включена в PDF, чтобы работала двусторонняя печать.


person TimGJ    schedule 21.06.2012    source источник


Ответы (2)


Если вы можете отслеживать номера страниц, просто добавьте команду PageBreak или canvas.showPage() в нужное время.

person Mike Driscoll    schedule 06.07.2012

Если вы используете механизм platypus в reportlab, вы можете попробовать переопределить класс BaseDocTemplate и использовать хуки afterPage и beforePage для отслеживания номеров страниц. Затем вы можете использовать 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)
person Nitzle    schedule 08.07.2012