Python reportlab insert image into table

In the reportlab manual, user manual (page 79), this is how images are inserted into the table.

I = Image('../images/replogo.gif') I.drawHeight = 1.25*inch*I.drawHeight / I.drawWidth I.drawWidth = 1.25*inch P0 = Paragraph(''' <b>A pa<font color=red>r</font>a<i>graph</i></b> <super><font color=yellow>1</font></super>''', styleSheet["BodyText"]) P = Paragraph(''' <para align=center spaceb=3>The <b>ReportLab Left <font color=red>Logo</font></b> Image</para>''', styleSheet["BodyText"]) data= [['A', 'B', 'C', P0, 'D'], ['00', '01', '02', [I,P], '04'], ['10', '11', '12', [P,I], '14'], ['20', '21', '22', '23', '24'], ['30', '31', '32', '33', '34']] t=Table(data,style=[('GRID',(1,1),(-2,-2),1,colors.green), ('BOX',(0,0),(1,-1),2,colors.red), ('LINEABOVE',(1,2),(-2,2),1,colors.blue), ('LINEBEFORE',(2,1),(2,-2),1,colors.pink), ('BACKGROUND', (0, 0), (0, 1), colors.pink), ('BACKGROUND', (1, 1), (1, 2), colors.lavender), ('BACKGROUND', (2, 2), (2, 3), colors.orange), ('BOX',(0,0),(-1,-1),2,colors.black), ('GRID',(0,0),(-1,-1),0.5,colors.black), ('VALIGN',(3,0),(3,0),'BOTTOM'), ('BACKGROUND',(3,0),(3,0),colors.limegreen), ('BACKGROUND',(3,1),(3,1),colors.khaki), ('ALIGN',(3,1),(3,1),'CENTER'), ('BACKGROUND',(3,2),(3,2),colors.beige), ('ALIGN',(3,2),(3,2),'LEFT'), ]) 

Therefore, based on the above user guide, I assume that to insert images into tables, all I need to do is import the image using PIL, the image module, load the image and use it as data for the table.

 from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4, cm,landscape from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import Paragraph, Table, TableStyle from reportlab.lib.enums import TA_LEFT, TA_CENTER from reportlab.lib import colors from PIL import Image as im a=im.open("temp.jpg") data=[['1',a],['3','4']] c = canvas.Canvas("Reportlabtest.pdf", pagesize=landscape(A4)) table = Table(data, colWidths=200, rowHeights=50) table.setStyle(TableStyle([ ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('BOX', (0,0), (-1,-1), 0.25, colors.black), ('BACKGROUND',(0,0),(-1,2),colors.lightgrey) ])) table.wrapOn(c, 200, 400) table.drawOn(c,20,50) c.save() 

But instead of inserting the image into the table, I created this message in pdf format "PIL.Jpegimageplugin.JPEGImageFile mode = RGB size = 200x200 at 0x179B1E8"

What could be the problem?

0
source share
2 answers

You can use ReportLab Image for image purpose instead of PIL .. hope this helps you. I changed your code below.

 from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4, cm,landscape from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import Paragraph, Table, TableStyle, Image from reportlab.lib.enums import TA_LEFT, TA_CENTER from reportlab.lib import colors from reportlab.lib.units import inch a = Image.open("path/to/temp.jpg") a.drawHeight = 2*inch a.drawWidth = 2*inch data=[['1',a],['3','4']] c = canvas.Canvas("Reportlabtest.pdf", pagesize=landscape(A4)) table = Table(data, colWidths=200, rowHeights=50) table.setStyle(TableStyle([ ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('BOX', (0,0), (-1,-1), 0.25, colors.black), ('BACKGROUND',(0,0),(-1,2),colors.lightgrey) ])) table.wrapOn(c, 200, 400) table.drawOn(c,20,50) c.save() 
+5
source

You do not specify drawHeight and drawWidth in your code.

-2
source

Source: https://habr.com/ru/post/953536/


All Articles