2012-06-21 3 views
2

ReportLab 및 Python 2.7을 사용하여 큰 문서를 조판하려고합니다.빈 짝수/왼쪽 페이지 비우기

여러 섹션 (1,000 페이지 문서에서 약 6 개)이 있으며 홀수/오른쪽 페이지에서 각각 시작하고 싶습니다. 앞 페이지가 홀수가 될지, 아니면 심지어 짝이 될지 전혀 모르겠으므로 특정 단락 스타일 앞에 추가 빈 페이지를 던질 수있는 기능이 필요합니다 (일부 페이지가 "의도적으로 비워 두었던"설명서에서 가끔 나오는 것처럼). 아무도 페이지의 숫자가 아니라 페이지의 텍스트 양을 기준으로 작업을 찾을 수있는 유일한 조건부 페이지 나누기로서 어떻게 수행 할 수 있는지 제안 할 수 있습니까?

또한 양면 인쇄가 가능하도록 빈 페이지가 PDF에 포함되어 있는지 확인해야합니다.

답변

0

페이지 번호를 추적 할 수 있으면 적절한 시간에 PageBreak 또는 canvas.showPage() 명령을 추가하기 만하면됩니다.

0

reportlab에서 오리너구리 엔진을 사용하는 경우 BaseDocTemplate 클래스를 무시하고 afterPagebeforePage 후크를 사용하여 페이지 번호를 추적 할 수 있습니다. 그런 다음 짝수 페이지가 발생할 때마다 showPage()를 사용할 수 있습니다.

예를 들어

:

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) 
:

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 클래스를 사용할 수 있습니다