2017-01-11 7 views
0

PDF를 생성하기 위해 ReportLab/오리너구리를 사용하여 장고 기반 웹 사이트 용 일부 PDF 생성 코드를 작성하고 있습니다.오리너구리 - PageTemplate에서 여러 프레임 사용

필자는 PageTemplate을 서브 클래 싱하여 일관된 페이지를 다듬을 수 있으며 요구 사항에 맞게 다중 열 레이아웃을 생성하는 코드를 포함 시켰습니다. 나는 현재 showBoundary = 1 디버깅을 위해있다.

그러나 두 열 레이아웃을 렌더링 할 때 나타나는 첫 번째 프레임 경계 만 보입니다. 무엇이 잘못 될 수 있습니까?

class ReportPageTemplate(PageTemplate): 
    def __init__(self, id='basic', columns=1, pagesize=A4, leftMargin=(2*cm), bottomMargin=(2.1*cm), colmargin=(0.5*cm)): 
     (right, top) = pagesize 
     right -= leftMargin 
     top -= bottomMargin 

     height = top - bottomMargin 
     width = (right - leftMargin) 
     # Subtract out blank space between columns 
     colwidth = (width - ((columns - 1) * colmargin))/columns 

     frames = [] 
     for col in range(columns): 
      left = leftMargin + (col * (colwidth + colmargin)) 
      frames.append(Frame(left, bottomMargin, colwidth, height, showBoundary=1)) 

     PageTemplate.__init__(self, id=id, frames=frames, pagesize=pagesize) 

    def beforeDrawPage(self, canvas, doc): 
     print self.id 
     (width, height) = canvas._pagesize 
     canvas.setLineWidth(0.2 * cm) 
     canvas.line(0.5*cm, height - (2*cm), width - (0.5*cm), height - (2*cm)) 
     canvas.line(0.5*cm, (2*cm), width - (0.5*cm), (2*cm)) 

답변

0

아, 나는 어리 석다.

두 번째 프레임은 첫 번째 프레임이 채워지는 경우에만 렌더링됩니다. 테스트를 위해 두 열을 모두 그려야하는 FrameBreak 객체를 포함해야했습니다.

코드가 실제로 작동 중입니다.