I'm trying to generate PDF's with Images.
im = ImageReader('00001.png')
c = canvas.Canvas('networkanalyze.pdf', pagesize=A4)
c.drawImage(im, 10, 10, mask='auto')
c.showPage()
c.save()
Traceback:
Traceback (most recent call last):
File "pdf.py", line 9, in <module>
c.drawImage(im, 10, 10, mask='auto')
File "/usr/lib/python2.6/site-packages/reportlab-2.7-py2.6-linux-x86_64.egg/reportlab/pdfgen/canvas.py", line 909, in drawImage
rawdata = image.getRGBData()
File "/usr/lib/python2.6/site-packages/reportlab-2.7-py2.6-linux-x86_64.egg/reportlab/lib/utils.py", line 656, in getRGBData
annotateException('\nidentity=%s'%self.identity())
File "/usr/lib/python2.6/site-packages/reportlab-2.7-py2.6-linux-x86_64.egg/reportlab/lib/utils.py", line 653, in getRGBData
self._data = im.tostring()
File "/usr/lib/python2.6/site-packages/Pillow-3.2.0-py2.6-linux-x86_64.egg/PIL/Image.py", line 699, in tostring
"Please call tobytes() instead.")
Exception: tostring() has been removed. Please call tobytes() instead.
2nd Approach:
def generate_pdf(c):
"""
letter :- (612.0, 792.0)
"""
im = Image.open("00001.png")
c.drawInlineImage(im, 256, 720, width=100, height=60)
c = canvas.Canvas("report_image.pdf", pagesize=letter)
generate_pdf(c)
c.save()
Traceback:
Traceback (most recent call last):
File "pdf2.py", line 14, in <module>
generate_pdf(c)
File "pdf2.py", line 11, in generate_pdf
c.drawInlineImage(im, 256, 720, width=100, height=60)
File "/usr/lib/python2.6/site-packages/reportlab-2.7-py2.6-linux-x86_64.egg/reportlab/pdfgen/canvas.py", line 837, in drawInlineImage
img_obj = PDFImage(image, x,y, width, height)
File "/usr/lib/python2.6/site-packages/reportlab-2.7-py2.6-linux-x86_64.egg/reportlab/pdfgen/pdfimages.py", line 42, in __init__
self.getImageData()
File "/usr/lib/python2.6/site-packages/reportlab-2.7-py2.6-linux-x86_64.egg/reportlab/pdfgen/pdfimages.py", line 156, in getImageData
imagedata, imgwidth, imgheight = self.PIL_imagedata()
File "/usr/lib/python2.6/site-packages/reportlab-2.7-py2.6-linux-x86_64.egg/reportlab/pdfgen/pdfimages.py", line 117, in PIL_imagedata
raw = myimage.tostring()
File "/usr/lib/python2.6/site-packages/Pillow-3.2.0-py2.6-linux-x86_64.egg/PIL/Image.py", line 699, in tostring
"Please call tobytes() instead.")
Exception: tostring() has been removed. Please call tobytes() instead.
So it seems to not be code related.
I am running python on a server:
Python 2.6.6 (r266:84292, Nov 21 2013, 10:50:32) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Version of Pillow: Pillow-3.2.0-py2.6-linux-x86_64.egg
Version of reportlab: reportlab-2.7-py2.6-linux-x86_64.egg
I searched for this particular error without success, what can I do to solve this?
From the traceback, you can see that reportlab
is calling the tostring()
method, which was deprecated by that commit in Pillow.
Thus, your code would probably work if you downgrade Pillow to version 3.1.
However, your version of reportlab is quite outdated as you have the version 2.7 and the version 3.3 is released. I didn't try it but I guess they fixed the issue and at least, it's worth to try!
The latest version of reportlab is not compatible with Python 2.6 but you should probably upgrade at least to Python 2.7, or even to Python 3 :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With