Reportlab에 바코드 이미지를 삽입하려고합니다. 나는 이것에 대해 많은 질문을하지만, 은 모두 이미이라고 가정하고 디렉토리 나 파일 시스템에 이미지 파일을 가지고 있다고 가정합니다.PIL 이미지 또는 StringIO에서 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 이미지가 작동하지 않는 것 같습니다. 이미지의 파일 이름이 없으면 (이미지가 메모리에 만들어지기 때문에) Reportlab의 Image 함수의 첫 번째 인수로 전달해야하는 것은 무엇입니까?
파이썬 3에서, 'IO 수입 BytesIO에서'대신 'cStringIO 수입 StringIO에서'사용. 그리고 'img2 = BytesIO()'대신 'img2 = StringIO()' –