2013-07-29 2 views
0

reportlab user guide (page 79)에서 이미지가 테이블에 삽입되는 방법입니다. Python reportlab 테이블에 이미지 삽입

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'), 
        ]) 

가 그래서 위의 사용 설명서에 따라, 내가 그 테이블에 이미지를 삽입하는 가정, 내가 할 일은 PIL, 이미지 모듈,로드 이미지와 테이블의 데이터로 사용을 사용하여 가져 오기 이미지입니다.

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() 

하지만 그 대신 테이블에 이미지를 삽입하는, 나는이 메시지는 문제가 될 수 무엇 "0x179B1E8에서 PIL.Jpegimageplugin.JPEGImageFile 모드 = RGB 크기 = 200x200 크기"PDF로

에 생성했다?

답변

5

PIL 대신 이미지 용으로 ReportLab의 이미지을 사용할 수 있습니다. 도움이되기를 바랍니다. 아래 코드를 수정했습니다.

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() 
-2

drawHeight & drawWidth을 코드에 설정하십시오.

+0

'drawHeight'와'drawWidth'는 강제입니까? 심지어 그 두 줄을 추가 한 후에도 나는 여전히 같은 문제가 있습니다. –