reportlab内でカモノハシエンジンを使用している場合は、BaseDocTemplate
クラスをオーバーライドし、afterPage
andbeforePage
フックを使用してページ番号を追跡してみてください。そうすれば、偶数ページに遭遇したときはいつでも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)