Ho riscontrato un problema che non riesco a capire con PIL e reportlab. In particolare, mi piacerebbe usare drawImage su una tela in reportlab usando un oggetto immagine PIL.Report Library e immagini della libreria di imaging Python da problemi di memoria
In passato ho inserito le immagini nei documenti di reportlab dal web utilizzando i dati grezzi, StringIO e la classe ImageReader di reportlab. Sfortunatamente, ImageReader prende un nome di file o un buffer di file come oggetto.
L'obiettivo finale è quello di poter inserire i codici QR (che sono oggetti PIL) nei PDF di reportlab. Una cosa che funziona è la seguente:
size, qrcode = PyQrcodec.encode('http://www.google.com')
qrcode.save("img.jpeg")
self.pdf.drawImage(ImageReader("img.jpeg"), 25, 25, width=125, height=125)
self.pdf.showPage()
Ciò consente di risparmiare l'immagine e poi lo legge in pdf. Ovviamente farlo in questo modo non ha senso.
I miei sforzi sono aggravati dalla storia di sviluppo relativamente lunga di reportlab che rende la ricerca delle risposte rilevanti per l'ultima versione (2.4).
Grazie per l'aiuto.
(A proposito, sto usando 1.1.6 PIL)
A proposito, la funzione precedente è in lib/utils.py in reportlab. – philipk
+1 buona presa. L'installatore PIL che mette i moduli PIL in una cartella PIL fuori dal percorso del sito è una decisione discutibile, ma ReportLab sta commettendo un errore peggiore facendo affidamento su di esso. Dovrebbe essere solo l'importazione dell'immagine. Ho risolto il problema ricorrendo alle patch per le scimmie dall'esterno: importate me stesso l'immagine e dicendo "reportlab.lib.utils.Image = Image'. – bobince
@bobince ha l'idea giusta qui. ReportLab fa alcune ipotesi davvero pessime circa la localizzazione del PIL, ma è più pulito da applicare dopo l'importazione con 'reportlab.lib.utils.Image = Image' piuttosto che per giocare con il codice di ReportLab e complicare la distribuzione. – dkamins