如何使用xhtml2pdf创建一个三色的景观布局?
我试过这样的方法,但不起作用。我应该从一开始就使用框架吗?
@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;
}
}发布于 2012-04-11 09:27:08
我不认为用xhtml2pdf可以做到这一点,即使它是基于reportlab的,它允许你这样做。
在处理了一段时间之后,下面的代码片段生成了下面的图像: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发布于 2019-08-03 03:15:58
https://stackoverflow.com/questions/10026207
复制相似问题