我正在尝试将条形码图像插入 Reportlab。我知道对此有很多问题,但他们都假设您已经在目录或文件系统中拥有图像文件。
由于 Reportlab 在 EAN13 条形码方面存在问题,我决定使用另一个名为 pyBarcode 的包为我生成图像。
最初我将图像保存在 StringIO 实例中并将其直接传递给,reportlab.platypus.flowables.Image
但这似乎不起作用。然后我阅读了文档:
支持 PIL/Java 1.4(Python/Java Imaging Library)支持的格式。
这是否意味着如果我通过 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 <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
不知何故,PIL Image 似乎也不起作用。如果我没有图像的文件名(因为我的图像是在内存中创建的),我应该将什么作为第一个参数传递给 Reportlab 的 Image 函数?