2014-09-30 20 views
8

Wenn ich versuche, die folgenden:Wie verwende ich reportlab drawImage mit einer Bild-URL?

from reportlab.lib.pagesizes import letter 
from reportlab.pdfgen.canvas import Canvas 
import urllib 
import StringIO 
import PIL.Image 

image_file = urllib.urlopen('https://www.google.com/images/srpr/logo11w.png') 
image_string = StringIO.StringIO(image_file.read()) 
logo = PIL.Image.open(image_string) 

canvas = Canvas('output.pdf', pagesize=letter) 
canvas.drawImage(logo, 10, 10) 
canvas.showPage() 
canvas.save() 

ich diesen Fehler:

Traceback (most recent call last): 
    File "imagefromurl.py", line 12, in <module> 
    canvas.drawImage(logo, 10, 10) 
    File "/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.py", line 857, in drawImage 
    imgObj = pdfdoc.PDFImageXObject(name, image, mask=mask) 
    File "/usr/lib/python2.7/dist-packages/reportlab/pdfbase/pdfdoc.py", line 2090, in __init__ 
    ext = string.lower(os.path.splitext(source)[1]) 
    File "/usr/lib/python2.7/posixpath.py", line 96, in splitext 
    return genericpath._splitext(p, sep, altsep, extsep) 
    File "/usr/lib/python2.7/genericpath.py", line 91, in _splitext 
    sepIndex = p.rfind(sep) 
    File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 515, in __getattr__ 
    raise AttributeError(name) 

Reportlab ist Version 2.5.

+0

Ich denke, Sie verpassen den Rest Ihrer Traceback ... – MattDMo

+0

auch, ['reportlab'] (https://pypi.python.org/pypi/reportlab) ist bis Version 3.1.8, und ist wie ein Rad, so lange Sie einen aktuellen "Pip" haben, sollten Sie in der Lage sein, leicht zu aktualisieren. – MattDMo

+0

@MattDMo: danke, behoben – ysth

Antwort

14

Ich tat es auf die harte Tour. Dies funktioniert (hinzugefügt auch die notwendige Maske transparent wird schwarz zu vermeiden):

from reportlab.lib.pagesizes import letter 
from reportlab.pdfgen.canvas import Canvas 
from reportlab.lib.utils import ImageReader 

logo = ImageReader('https://www.google.com/images/srpr/logo11w.png') 

canvas = Canvas('output.pdf', pagesize=letter) 
canvas.drawImage(logo, 10, 10, mask='auto') 
canvas.showPage() 
canvas.save() 

Obwohl die harte Art und Weise mir einen Fehler zu erkennen, erlaubt hätte die Bild-URL zu holen und damit umgehen (zB ein lokales Bild ersetzt), und das nicht.

Verwandte Themen