加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – reportlab图像到PDF:“请致电tobytes()”

发布时间:2020-12-20 11:51:09 所属栏目:Python 来源:网络整理
导读:我正在尝试使用图像生成PDF. im = ImageReader('00001.png')c = canvas.Canvas('networkanalyze.pdf',pagesize=A4)c.drawImage(im,10,mask='auto')c.showPage()c.save() 追溯: Traceback (most recent call last): File "pdf.py",line 9,in module c.drawIm
我正在尝试使用图像生成PDF.

im = ImageReader('00001.png')
c = canvas.Canvas('networkanalyze.pdf',pagesize=A4)
c.drawImage(im,10,mask='auto')
c.showPage()
c.save()

追溯:

Traceback (most recent call last):
  File "pdf.py",line 9,in <module>
    c.drawImage(im,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.

第二种方法:

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 (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,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",in tostring
    "Please call tobytes() instead.")
Exception: tostring() has been removed. Please call tobytes() instead.

所以它似乎与代码无关.

我在服务器上运行python:

Python 2.6.6(r266:84292,2013年11月21日,10:50:32)
Linux2上的[GCC 4.4.7 20120313(Red Hat 4.4.7-4)]

枕头版:Pillow-3.2.0-py2.6-linux-x86_64.egg

reportlab的版本:reportlab-2.7-py2.6-linux-x86_64.egg

我没有成功搜索这个特殊的错误,
我该怎么做才能解决这个问题?

解决方法

从回溯中,您可以看到reportlab正在调用tostring()方法,该方法在Pillow中被 that commit弃用.

因此,如果将Pillow降级到3.1版,您的代码可能会有效.

但是,您的版本的reportlab已经过时,因为您的版本为2.7并且version 3.3已发布.我没试过,但我想他们已经解决了这个问题,至少,值得一试!

reportlab的最新版本与Python 2.6不兼容,但你应该至少升级到Python 2.7,甚至升级到Python 3

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读