2

ReportLab と Python 2.7 を使用して大きな文書をタイプセットしようとしています。

いくつかのセクション (1,000 ページのドキュメントで約 6) があり、それぞれを奇数/右側のページから開始したいと考えています。前のページが奇数か偶数かはわかりませんが、特定の段落スタイルの前にオプションで追加の空白ページをスローする機能が必要です (マニュアルで一部のページが「意図的に空白のまま」になることがあるように)。私が見つけることができる唯一の条件付き改ページは、ページ番号ではなくページ上のテキストの量に基づいて機能するため、誰でもこれを行う方法を提案できますか?

また、両面印刷が機能するように、空白のページが PDF に含まれていることを確認する必要があります。

4

2 に答える 2

0

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

ページ番号を追跡できる場合は、適切なタイミングで PageBreak または canvas.showPage() コマンドを追加するだけです。

于 2012-07-06T20:22:58.087 に答える