[reportlab-users] Please help with error in pdfbase/pdfdoc.py (TypeError: string argument expected, got 'bytes')
raf
reportlab at raf.org
Mon Feb 24 21:55:59 EST 2025
Hi,
macos-10.14 (old), python-3.12 (via macports), reportlab-4.3.1 (via pip)
I'm converting some python2 code that uses reportlab-3.3.0
to python3 (with reportlab 4.3.1) and I'm encountering the
following error:
Traceback (most recent call last):
File "/Users/raf/src/aps.py3/lib/./report.py", line 6196, in test_pdf_basefont
report_pdf = report.pdf()
^^^^^^^^^^^^
File "/Users/raf/src/aps.py3/lib/./report.py", line 1844, in pdf
self._pdf.save()
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/reportlab/pdfgen/canvas.py", line 1301, in save
self._doc.SaveToFile(self._filename, self)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/reportlab/pdfbase/pdfdoc.py", line 215, in SaveToFile
f.write(data)
TypeError: string argument expected, got 'bytes'
The context of the f.write(data) file is:
data = self.GetPDFData(canvas)
if isUnicode(data):
data = data.encode('latin1')
f.write(data)
So data is explictly converted from str to bytes, but
https://docs.python.org/3/tutorial/inputoutput.html
says:
f.write(string) writes the contents of string to the
file, returning the number of characters written.
This looks like a bug that would always be triggered
every time this code is run, but that seems unlikely.
It looks like the above code should be:
data = self.GetPDFData(canvas)
if not isUnicode(data):
data = data.decode('latin1')
f.write(data)
or even:
data = self.GetPDFData(canvas)
if not isUnicode(data):
data = data.decode('utf8')
f.write(data)
What are your thoughts? Is this a bug in reportlab?
If so, can it be fixed?
If not, what might I have done to cause this?
Many thanks in advance,
raf
More information about the reportlab-users
mailing list