Seite 1 von 1

Image-Objekt mit reportlab in pdf einfügen

Verfasst: Dienstag 17. August 2010, 08:23
von mathi
Hallo,

ich möchte mittels

Code: Alles auswählen

c.drawImage(bild,2.0*cm,1.0*cm,width=2.0*cm,height=2.0*cm,mask=None)
ein Bild einfügen welches in Codeform vorliegt (habe ich mit img2py generiert)

das Bils ist etwa so:

Code: Alles auswählen

from wx.lib.embeddedimage import PyEmbeddedImage

symbol = PyEmbeddedImage(     .......    "pmnU0DnIz++f/23bKvbKshyNRv2X/R+SUCqnYpb6mwAAAABJRU5ErkJggg==")

bild = symbol.GetImage
folgender Fehler erscheint:
c.drawImage(bild,2.0*cm,1.0*cm,width=2.0*cm,height=2.0*cm,mask=None)
File "C:\Python26\lib\site-packages\reportlab\pdfgen\canvas.py", line 825, in drawImage
imgObj = pdfdoc.PDFImageXObject(name, image, mask=mask)
File "C:\Python26\lib\site-packages\reportlab\pdfbase\pdfdoc.py", line 2076, in __init__
ext = string.lower(os.path.splitext(source)[1])
File "C:\Python26\lib\ntpath.py", line 190, in splitext
return genericpath._splitext(p, sep, altsep, extsep)
File "C:\Python26\lib\genericpath.py", line 91, in _splitext
sepIndex = p.rfind(sep)
AttributeError: 'Image' object has no attribute 'rfind'
Was mache ich falsch???

Danke im Voraus
Gruß Mathi

Re: Image-Objekt mit reportlab in pdf einfügen

Verfasst: Dienstag 17. August 2010, 08:30
von Darii
Du musst die Funktion GetImage auch aufrufen…

Re: Image-Objekt mit reportlab in pdf einfügen

Verfasst: Dienstag 17. August 2010, 08:57
von BlackJack
@mathi: Die `drawImage()`-Methode erwartet einen Dateinamen und nicht den Inhalt einer Datei.

Re: Image-Objekt mit reportlab in pdf einfügen

Verfasst: Dienstag 17. August 2010, 10:10
von mathi
ich kann aber ein PIL ImageObjekt einbinden.... jetzt stellt sich nur die Frage ob ich den vorhandenen Inhalt als PIL Image ausdrücken/umwandeln kann??

Gruß Mathi

Re: Image-Objekt mit reportlab in pdf einfügen

Verfasst: Dienstag 17. August 2010, 12:11
von mathi
der Lösung näher:


Ich kann ja mit

Code: Alles auswählen

width = symbol.GetImage().GetWidth()
height = symbol.GetImage().GetHeight()
symbol= Image.fromstring("L", (width, height), symbol.GetData())
ein PIL Objekt erzeugen, aber:

symbol=Image.fromstring("L", (width, height), symbol.GetData())
File "C:\Python26\lib\site-packages\PIL\Image.py", line 1797, in fromstring
im.fromstring(data, decoder_name, args)
File "C:\Python26\lib\site-packages\PIL\Image.py", line 594, in fromstring
raise ValueError("not enough image data")
ValueError: not enough image data
setze ich (width, height) auf Werte je kleiner als 50 kann ich zwar ein Bild einfügen, dieses sieht aber aus wie: ein Fernsehbild ohne Empfang (Rauschen)

Wo liegt der Fehler??

Re: Image-Objekt mit reportlab in pdf einfügen

Verfasst: Dienstag 17. August 2010, 15:02
von mathi
eins habe ich zumindest herausgefunden, die richtige Mehtode heißt `drawInlineImage()`,

aber das PIL - Problem konnte ich noch nicht lösen... :-(

Re: Image-Objekt mit reportlab in pdf einfügen

Verfasst: Dienstag 17. August 2010, 15:15
von BlackJack
@mathi: In welchem Format liegen denn die Bilddaten in der Zeichenkette vor? Entweder hast Du den falschen Modus gewählt oder den falschen Decoder (Default ist 'raw').

`drawInlineImage()` legt übrigens die Bilddaten für jeden Aufruf erneut im PDF ab. Wenn das Bild mehrfach gesetzt wird, ist das also etwas unökonomisch.