Fügen Sie das Bild entweder aus PIL-Bild oder StringIO in Reportlab ein

Ich versuche, ein Barcode-Bild in Reportlab einzufügen. Ich weiß, dass viele Fragen dazu gestellt werden, aberalle von ihnen nehmen an dass Sie die Image-Datei bereits im Verzeichnis oder im Dateisystem haben.

Aufgrund der Tatsache, dass Reportlab Probleme mit EAN13-Barcodes hat, habe ich beschlossen, ein anderes Paket mit dem Namen pyBarcode zu verwenden, um das Bild für mich zu generieren.

Zunächst habe ich das Bild in einer StringIO-Instanz gespeichert und direkt an übergebenreportlab.platypus.flowables.Image aber das schien nicht zu funktionieren. Dann habe ich die Dokumentation gelesen:

Formate, die von PIL / Java 1.4 (der Python / Java Imaging Library) unterstützt werden, werden unterstützt.

Bedeutet dies, dass dies funktionieren sollte, wenn ich ein PIL-Bild übergebe? Ich habe eine Ausnahme gemacht, als ich Folgendes ausprobiert habe:

>>> 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

Irgendwie scheint PIL Image auch nicht zu funktionieren. Was soll ich als erstes Argument an die Image-Funktion von Reportlab übergeben, wenn ich den Dateinamen des Bildes nicht habe (weil meine Bilder im Speicher erstellt wurden)?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage