我遇到了一個問題,我似乎無法弄清楚PIL和reportlab。具體來說,我想使用PIL Image對象在reportlab中的畫布上使用drawImage。ReportLab和Python Imaging Library從內存問題的圖像問題
在過去,我使用原始數據,StringIO和reportlab的ImageReader類將圖像插入到來自Web的reportlab文檔中。不幸的是,ImageReader需要一個文件名或像對象一樣的文件緩衝區。
最終目標是能夠將QR碼(這是PIL對象)放入reportlab PDF中。有一件事情可以工作,如下所示:
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()
這樣可以保存圖像,然後將其讀入pdf。顯然這樣做是沒有道理的。
我的努力與reportlab相對較長的發展歷史相結合,使得找到與最新版本(2.4)相關的答案。
感謝您的幫助。
(順便說一句,我使用的是1.1.6 PIL)
順便說一句,上面的函數在reportlab中的lib/utils.py中。 – philipk 2010-06-06 00:02:51
+1好抓。 PIL安裝程序將PIL模塊放在站點路徑的PIL文件夾中是一個值得懷疑的決定,但ReportLab依靠它而犯了一個更嚴重的錯誤。它應該只是導入圖像。我通過從外部猴子修補來解決問題:import自己,並說'reportlab.lib.utils.Image = Image'。 – bobince 2011-01-18 00:13:15
@bobince在這裏有正確的想法。 ReportLab對PIL位置做出了一些非常糟糕的假設,但在使用'reportlab.lib.utils.Image = Image'導入後修補會更乾淨,而不是擺弄ReportLab代碼並使部署複雜化。 – dkamins 2011-09-28 03:43:24