Generating landscape PDF with columns in Django
Posted 1 month, 1 week ago
The easiest way to generate a pdf response in Django is to probably use xhmtl2pdf. However, if your pdf requires 'floats', xhtml2pdf won't be able to solve it for you.
- 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>
- (1) Please check the registration handy kit to ensure you have received
- the item(s) as marked on the cover.
- (2) The official receipt(s) for the payments you have made are enclosed.
- Please check to ensure that it was issued correctly.
- (3) You will be requested to present the appropriate coupon(s)/ ticket (s)
- for admission to lunch, banquet or other events.
- (4) The organizer nor its appointed Professional Conference Organiser shall
- not be responsible for any loss or damage to this kit
- </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>
- This kit contains the checked items:
- [] Namebadge
- [] Official Receipt(s)
- [] Lunch Coupon(s)
- [] Banquet Ticket & Reply Slip
- [] Others:
- _________________________________
- _________________________________
- _________________________________
- _________________________________
-
-
-
-
- <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
Leave a Comment



