Вставьте изображение в Reportlab из PIL-изображения или StringIO
Я пытаюсь вставить изображение штрих-кода в Reportlab. Я знаю, что есть много вопросов по этому поводу, новсе они предполагают что у вас уже есть файл изображения в каталоге или в файловой системе.
В связи с тем, что у Reportlab есть проблемы со штрих-кодами EAN13, я решил использовать другой пакет, называемый pyBarcode, для создания изображения для меня.
Сначала я сохранил изображение в экземпляре StringIO и передал его непосредственноreportlab.platypus.flowables.Image
но это неКажется, не работает. Затем я прочитал документацию:
Поддерживаются форматы, поддерживаемые PIL / Java 1.4 (библиотека изображений Python / Java).
Означает ли это, что если я передам изображение PIL, это должно работать? Я получил исключение, когда попробовал следующее:
>>> import PIL
>>> from reportlab.platypus.flowables import Image
>>> fp = StringIO(the_barcode.getvalue())
>>> barcode_image = PIL.Image.open(fp)
>>> doc = SimpleDocTemplate('barcode.pdf')
>>> story = [Image(barcode_image)]
>>> Traceback (most recent call last):
File "create.py", line 57, in
main()
File "create.py", line 24, in main
save_pdf(fp, STYLE, ART, COLOR, SIZE)
File "create.py", line 28, in save_pdf
fp = StringIO(fp.getvalue())
File "/home/mark/.virtualenvs/barcode/local/lib/python2.7/site-packages/reportlab-2.6-py2.7-linux-i686.egg/reportlab/platypus/flowables.py", line 402, in __init__
if not fp and os.path.splitext(filename)[1] in ['.jpg', '.JPG', '.jpeg', '.JPEG']:
File "/home/mark/.virtualenvs/barcode/lib/python2.7/posixpath.py", line 95, in splitext
return genericpath._splitext(p, sep, altsep, extsep)
File "/home/mark/.virtualenvs/barcode/lib/python2.7/genericpath.py", line 91, in _splitext
sepIndex = p.rfind(sep)
File "/home/mark/.virtualenvs/barcode/local/lib/python2.7/site-packages/PIL/Image.py", line 512, in __getattr__
raise AttributeError(name)
AttributeError: rfind
Каким-то образом PIL Image не делаетКажется, тоже не работает. Что я должен передать в качестве первого аргумента Reportlab 'Функция изображения, если я неt имя файла изображения (потому что мои изображения создаются в памяти)?