2012-04-05 20 views
2

xhtml2pdfを使用して3列のランドスケープレイアウトを作成するにはどうすればよいですか?xhtml2pdfをランドスケープモードで使用してPDFを生成する

私はこれを試しましたが、うまくいきませんでした。私は最初の場所でフレームを使用すべきでしょうか?

@page { 
    size: a4 landscape; 

    @frame left { 
     -pdf-frame-content: left; 
     -pdf-frame-border: 1; 
     width: 9.9cm; 
     text-align: left; 
    } 
    @frame middle { 
     -pdf-frame-content: middle; 
     -pdf-frame-border: 1; 
     width: 9.9cm; 
     text-align: left; 
    } 
    @frame right { 
     -pdf-frame-content: left; 
     -pdf-frame-border: 1; 
     width: 9.9cm; 
     text-align: left; 
    } 
} 

答えて

1

私はそれがあなたがそれを可能にするreportlabに基づいていますが、xhtml2pdfで行うことはできないと思います。 http://imgur.com/d4zRH

def badge(request): 
    # Create the HttpResponse object with the appropriate PDF headers. 
    response = HttpResponse(mimetype='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename=somefilename.pdf' 

    # Create the PDF object, using the StringIO object as its "file." 
    pagesize = pagesizes.landscape(letter) 
    pagewidth, pageheight = pagesize 
    doc = platypus.BaseDocTemplate(filename=response, pagesize=pagesize, 
      showBoundary=1) 
    newHeight = doc.bottomMargin + doc.topMargin + doc.height 
    newWidth = doc.leftMargin + doc.rightMargin + doc.width 

    # reset margins 
    doc.leftMargin = 0 
    doc.bottomMargin = 0 
    doc.rightMargin = 0 
    doc.topMargin = 0 

    # create the frames 
    frames = [] 
    left_frame_1 = Frame(doc.leftMargin, 
      doc.bottomMargin, 
      newWidth/3, 
      newHeight/6, 
      showBoundary=1, 
      id="left_frame_1") 
    left_frame_2 = Frame(doc.leftMargin, 
      doc.bottomMargin + newHeight/6, 
      newWidth/3, 
      newHeight/6, 
      showBoundary=1, 
      id="left_frame_2") 
    left_frame_3 = Frame(doc.leftMargin, 
      doc.bottomMargin + newHeight/6 * 2, 
      newWidth/3, 
      newHeight/6, 
      showBoundary=1, 
      id="left_frame_3") 
    left_frame_4 = Frame(doc.leftMargin, 
      doc.bottomMargin + newHeight/6 * 3, 
      newWidth/3, 
      newHeight/6, 
      showBoundary=1, 
      id="left_frame_4") 
    left_frame_5 = Frame(doc.leftMargin, 
      doc.bottomMargin + newHeight/6 * 4, 
      newWidth/3, 
      newHeight/6, 
      showBoundary=1, 
      id="left_frame_5") 
    left_frame_6 = Frame(doc.leftMargin, 
      doc.bottomMargin + newHeight/6 * 5, 
      newWidth/3, 
      newHeight/6, 
      showBoundary=1, 
      id="left_frame_6") 
    mid_frame_1 = Frame(doc.leftMargin + newWidth/3, 
      doc.bottomMargin, 
      newWidth/3, 
      newHeight/6 * 4, 
      showBoundary=1, 
      id="mid_frame_1") 
    mid_frame_2 = Frame(doc.leftMargin + newWidth/3, 
      doc.bottomMargin + newHeight/6 * 4, 
      newWidth/3, 
      newHeight/6 * 2, 
      showBoundary=1, 
      id="mid_frame_2") 
    right_frame_1 = Frame(doc.leftMargin + newWidth/3 * 2, 
      doc.bottomMargin, 
      newWidth/3, 
      newHeight/6 * 2, 
      showBoundary=1, 
      id="right_frame_1") 
    right_frame_2 = Frame(doc.leftMargin + newWidth/3 * 2, 
      doc.bottomMargin + newHeight/6 * 2, 
      newWidth/3, 
      newHeight/6 * 3, 
      showBoundary=1, 
      id="right_frame_2") 
    right_frame_3 = Frame(doc.leftMargin + newWidth/3 * 2, 
      doc.bottomMargin + newHeight/6 * 5, 
      newWidth/3, 
      newHeight, 
      showBoundary=1, 
      id="right_frame_3") 

    frames.append(left_frame_1) 
    frames.append(left_frame_2) 
    frames.append(left_frame_3) 
    frames.append(left_frame_4) 
    frames.append(left_frame_5) 
    frames.append(left_frame_6) 
    frames.append(mid_frame_1) 
    frames.append(mid_frame_2) 
    frames.append(right_frame_1) 
    frames.append(right_frame_2) 
    frames.append(right_frame_3) 

    Elements = [] 

    styles = getSampleStyleSheet() 

    # LEFT COL CONTENT 
    Elements.append(Paragraph("LEFT1, " * 10, 
     styles['Normal'])) 
    Elements.append(FrameBreak()) 
    Elements.append(Paragraph("LEFT2, " * 10, 
     styles['Normal'])) 
    Elements.append(FrameBreak()) 
    Elements.append(Paragraph("LEFT3, " * 10, 
     styles['Normal'])) 
    Elements.append(FrameBreak()) 
    Elements.append(Paragraph("LEFT4, " * 10, 
     styles['Normal'])) 
    Elements.append(FrameBreak()) 
    Elements.append(Paragraph("LEFT5, " * 10, 
     styles['Normal'])) 
    Elements.append(FrameBreak()) 
    Elements.append(Paragraph("LEFT6, " * 10, 
     styles['Normal'])) 
    Elements.append(FrameBreak()) 

    # MID COL CONTENT 
    Elements.append(Paragraph("MID_2, " * 20, 
     styles['Normal'])) 
    Elements.append(FrameBreak()) 
    Elements.append(Paragraph(''' 
    <para><b>NOTE</b><br /> 
    (1) Please check the registration handy kit to ensure you have received 
    the item(s) as marked on the cover. <br /> 
    (2) The official receipt(s) for the payments you have made are enclosed. 
    Please check to ensure that it was issued correctly. <br /> 
    (3) You will be requested to present the appropriate coupon(s)/ ticket (s) 
    for admission to lunch, banquet or other events. <br /> 
    (4) The organizer nor its appointed Professional Conference Organiser shall 
    not be responsible for any loss or damage to this kit <br /> 
    </para> 
    ''', styles['Normal'])) 
    Elements.append(FrameBreak()) 

    # RIGHT COL CONTENT 
    Elements.append(Paragraph("RIGHT_1 " * 30, 
     styles['Normal'])) 
    Elements.append(FrameBreak()) 
    Elements.append(Paragraph(''' 
    <para><b><font size="16">REGISTRATION Handy Kit</font></b> <br /> 
    This kit contains the checked items: <br /> 
    [] Namebadge <br /> 
    [] Official Receipt(s) <br /> 
    [] Lunch Coupon(s) <br /> 
    [] Banquet Ticket & Reply Slip <br /> 
    [] Others: <br /> 
    _________________________________ 
    _________________________________ 
    _________________________________ 
    _________________________________ 
    <br /> 
    <br /> 
    <br /> 
    <i>If any of the checked items are missing in your kit, please inform the 
    registration counter staff</i> 
    </para> 
    ''', styles['Normal'])) 
    Elements.append(FrameBreak()) 
    Elements.append(Paragraph("RIGHT_3, " * 10, 
     styles['Normal'])) 

    doc.addPageTemplates(platypus.PageTemplate(id="TwoCol", frames=frames)) 
    doc.build(Elements) 

    return response 

しばらくいじり後、次のコードは、次の画像を生成します

関連する問題