Python Table 内的 ReportLab 图片
Python ReportLab Pictures within Table
我正在使用 Reportlab 生成包含一堆 table 和图表的 PDF。
我可以使用 TableStyle 大致得到我想要的东西:
def get_image(path, width=1*cm):
img = utils.ImageReader(path)
iw, ih = img.getSize()
aspect = ih / float(iw)
return Image(path, width=width, height=(width * aspect),hAlign='LEFT')
# Use basic styles and the SimpleDocTemplate to get started with reportlab
styles=getSampleStyleSheet()
doc = SimpleDocTemplate("NCM_weekly.pdf",pagesize=letter,
rightMargin=inch/2,leftMargin=inch/2,
topMargin=18,bottomMargin=18)
# The "story" just holds "instructions" on how to build the PDF
Story=[]
im = Image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\ncm_logo.jpeg')
Story.append(Spacer(1,200))
Story.append(im)
Story.append(PageBreak())
add_text('Weekly Packet',style='Heading1',fontsize=24)
add_text(today, style="Heading2", fontsize=12)
image0 = get_image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\exps.jpeg', width=4*inch)
Story.append(image0)
im = Image(buf_perf, 7*inch, 3*inch)
Story.append(im)
image1 = get_image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\pnl.jpeg', width=4*inch)
image2 = get_image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\fac_pnl.jpeg', width=4*inch)
image3 = get_image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\ind_pnl.jpeg', width=4*inch)
# assuming image1, image2, image3 are your images. change colWidths and rowHeights
# as needed
chart_style = TableStyle([('VALIGN', (0, 0), (-1, -1), 'TOP')])
Story.append(Table([[image1, image2],[image3]],
colWidths=[4 * inch, 4 * inch],
rowHeights=[2.5 * inch, 2.5 * inch], style=chart_style))
# This command will actually build the PDF
doc.build(Story)
# closer all buffers
buf_perf.close()
这让我明白了:
问题是我想把底部的图(是一张图片)向上移动以填充白色space,我理解这个白色space是因为我有一个 table 网格,右边的图片占用了太多的 Z 轴。我想我的问题是,最好的解决方案是什么?
您必须使用 span 和 aling 属性来扩展像元大小并获得适当的分布。请参阅第 88 页的文档 (https://www.reportlab.com/docs/reportlab-userguide.pdf),我做了类似的事情:
如果我有图片和完整的代码,会更有帮助。
我正在使用 Reportlab 生成包含一堆 table 和图表的 PDF。
我可以使用 TableStyle 大致得到我想要的东西:
def get_image(path, width=1*cm):
img = utils.ImageReader(path)
iw, ih = img.getSize()
aspect = ih / float(iw)
return Image(path, width=width, height=(width * aspect),hAlign='LEFT')
# Use basic styles and the SimpleDocTemplate to get started with reportlab
styles=getSampleStyleSheet()
doc = SimpleDocTemplate("NCM_weekly.pdf",pagesize=letter,
rightMargin=inch/2,leftMargin=inch/2,
topMargin=18,bottomMargin=18)
# The "story" just holds "instructions" on how to build the PDF
Story=[]
im = Image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\ncm_logo.jpeg')
Story.append(Spacer(1,200))
Story.append(im)
Story.append(PageBreak())
add_text('Weekly Packet',style='Heading1',fontsize=24)
add_text(today, style="Heading2", fontsize=12)
image0 = get_image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\exps.jpeg', width=4*inch)
Story.append(image0)
im = Image(buf_perf, 7*inch, 3*inch)
Story.append(im)
image1 = get_image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\pnl.jpeg', width=4*inch)
image2 = get_image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\fac_pnl.jpeg', width=4*inch)
image3 = get_image(r'\dcmfs01\common\DYang\Nymeria\Production Reports\ind_pnl.jpeg', width=4*inch)
# assuming image1, image2, image3 are your images. change colWidths and rowHeights
# as needed
chart_style = TableStyle([('VALIGN', (0, 0), (-1, -1), 'TOP')])
Story.append(Table([[image1, image2],[image3]],
colWidths=[4 * inch, 4 * inch],
rowHeights=[2.5 * inch, 2.5 * inch], style=chart_style))
# This command will actually build the PDF
doc.build(Story)
# closer all buffers
buf_perf.close()
这让我明白了:
问题是我想把底部的图(是一张图片)向上移动以填充白色space,我理解这个白色space是因为我有一个 table 网格,右边的图片占用了太多的 Z 轴。我想我的问题是,最好的解决方案是什么?
您必须使用 span 和 aling 属性来扩展像元大小并获得适当的分布。请参阅第 88 页的文档 (https://www.reportlab.com/docs/reportlab-userguide.pdf),我做了类似的事情:
如果我有图片和完整的代码,会更有帮助。