Insertar imagen en Reportlab desde PIL image o StringIO
Estoy tratando de insertar una imagen de código de barras en Reportlab. Sé que hay muchas preguntas sobre esto, perotodos asumen que ya tiene el archivo de imagen en el directorio o en el sistema de archivos.
Debido al hecho de que Reportlab tiene problemas con los códigos de barras EAN13, decidí usar otro paquete llamado pyBarcode para generar la imagen para mí.
Inicialmente guardé la imagen en una instancia de StringIO y la pasé directamente areportlab.platypus.flowables.Image
pero eso no parece funcionar. Luego leo la documentación:
Los formatos compatibles con PIL / Java 1.4 (la biblioteca de imágenes de Python / Java) son compatibles.
¿Significa esto que si paso una imagen PIL, esto debería funcionar? Obtuve una excepción cuando probé lo siguiente:
>>> 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 <module>
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
De alguna manera, la imagen de PIL tampoco parece funcionar. ¿Qué debo pasar como primer argumento a la función Imagen de Reportlab si no tengo el nombre de archivo de la imagen (porque mis imágenes se crean en la memoria)?