У меня проблема с использованием ReportLab и PIL (в проекте Flask) с использованием виртуальной машины Vagrant (2.2.3)
Ошибка обнаружена с использованием функции readJPEGInfo () .Файл PNG ( -rwxrwxr-- 1 www-data www-data 21K juin 22 2018 ) находится там:
site_media/img/84/5_1_pied_de_page.png: PNG image data, 1066 x 47, 8-bit/color RGBA, non-interlaced
Сообщение об ошибке:
(unpack requires a string argument of length 1 Imaging Library not available, unable to import bitmaps only jpegs
fileName='/var/www/my_project/my_project/site_media/img/20/5_1_pied_de_page.png' identity=[ImageReader@0x7fdd75f2a110
filename='/var/www/my_project/my_project/site_media/img/20/5_1_pied_de_page.png']
fileName='/var/www/my_project/my_project/site_media/img/20/5_1_pied_de_page.png' identity=[ImageReader@0x7fdd75f2a110
filename='/var/www/my_project/my_project/site_media/img/20/5_1_pied_de_page.png'] --> <class 'struct.error'> => Traceback (most recent call last): File "/var/www/my_project/my_project/flask_my_project/views.py", line 206, in zonesmeteo createDisplay(t, config, tabAlerts, demain, message)
File "/var/www/my_project/my_project/flask_my_project/utils.py", line 29, in createDisplay tr.generateFiles()
File "/var/www/my_project/my_project/cron_dept_treatments/84.py", line 64, in generateFiles self.dicoFolders)
File "/var/www/my_project/my_project/cron_dept_treatments/84.py", line 258, in __init__ table5.drawOn(self.c,15,12)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/platypus/flowables.py", line 111, in drawOn self._drawOn(canvas)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/platypus/flowables.py", line 92, in _drawOn self.draw()#this is the bit you overload
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/platypus/tables.py", line 1425, in draw self._drawCell(cellval, cellstyle, (colpos, rowpos), (colwidth, rowheight))
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/platypus/tables.py", line 1558, in _drawCell v.drawOn(self.canv,x,y)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/platypus/flowables.py", line 111, in drawOn self._drawOn(canvas)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/platypus/flowables.py", line 92, in _drawOn self.draw()#this is the bit you overload
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/platypus/flowables.py", line 511, in draw self.canv.drawImage( self._img or self.filename,
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/platypus/flowables.py", line 481, in __getattr__ self._img = ImageReader(self._file)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/lib/utils.py", line 810, in __init__ annotateException('\nfileName=%r identity=%s'%(fileName,self.identity()))
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/lib/utils.py", line 1390, in annotateException rl_reraise(t,v,b)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/lib/utils.py", line 804, in __init__ annotateException('\nImaging Library not available, unable to import bitmaps only jpegs\nfileName=%r identity=%s'%(fileName,self.identity()))
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/lib/utils.py", line 1390, in annotateException rl_reraise(t,v,b)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/lib/utils.py", line 802, in __init__ self._width,self._height,c=readJPEGInfo(self.fp)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/pdfbase/pdfutils.py", line 243, in readJPEGInfo x = struct.unpack('B', image.read(1)) error: unpack requires a string argument of length 1 Imaging Library not available, unable to import bitmaps only jpegs fileName='/var/www/my_project/my_project/site_media/img/20/5_1_pied_de_page.png' identity=[ImageReader@0x7fdd75f2a110
filename='/var/www/my_project/my_project/site_media/img/20/5_1_pied_de_page.png'] fileName='/var/www/my_project/my_project/site_media/img/20/5_1_pied_de_page.png' identity=[ImageReader@0x7fdd75f2a110
filename='/var/www/my_project/my_project/site_media/img/20/5_1_pied_de_page.png'] )
Часть pip freeze (python 2.7):
Pillow==2.6.1
reportlab==3.4.0
Пользователь / группа:
$ cat /etc/group | grep data
www-data:x:33:vagrant,apache,nginx,httpd,www-data,www-user
Итак, я делаю простой тестовый файл python:
import reportlab, PIL
from reportlab.platypus import SimpleDocTemplate
from reportlab.pdfgen import canvas
from reportlab.platypus import Frame, Image
png_file = "/var/www/test/5_1_pied_de_page.png"
img=canvas.Canvas(png_file)
my_doc = SimpleDocTemplate('myfile.pdf')
parts=[]
parts.append(Image(png_file))
my_doc.build(parts)
Те же ошибки:
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/lib/utils.py", line 802, in __init__
self._width,self._height,c=readJPEGInfo(self.fp)
File "/home/vagrant/.virtualenvs/my_project/lib/python2.7/site-packages/reportlab/pdfbase/pdfutils.py", line 243, in readJPEGInfo
x = struct.unpack('B', image.read(1))
struct.error: unpack requires a string argument of length 1
Imaging Library not available, unable to import bitmaps only jpegs
fileName='/var/www/my_project/my_project/site_media/img/84/5_1_pied_de_page.png' identity=[ImageReader@0x7fc9223f3e50 filename='/var/www/my_project/my_project/site_media/img/84/5_1_pied_de_page.png']
fileName='/var/www/my_project/my_project/site_media/img/84/5_1_pied_de_page.png' identity=[ImageReader@0x7fc9223f3e50 filename='/var/www/my_project/my_project/site_media/img/84/5_1_pied_de_page.png']
(my_project)
И в моем тестовом файле я конвертировал PNG в JPG: ошибок нет, но файл pdf пуст:)
Спасибо.
F.
$ uname -a
Linux vm 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux