Solución a error de decode en combinación Python QT PyQT ReportLab – AttributeError: ‘QString’ object has no attribute ‘decode’

El sistema Komunal que desarrolle en el 2013 usando Python, QT4, PyQT4 y SQLite con el código disponible en GitHub: https://github.com/leninmhs/komunal hoy probándolo no generaba los PDF. Para generar los pdf desde python use ReportLab que es excelente solución para esta tarea. En su momento cuando publique el código en GitHub los pdf se exportaban sin problema, hoy volviendo a levantar ese código fallaba intentando guardar el archivo pdf, el error fue el siguiente:

File “/usr/lib/python2.7/dist-packages/reportlab/lib/utils.py”, line 1395, in makeFileName
s = s.decode(‘utf8’)
AttributeError: ‘QString’ object has no attribute ‘decode’

La ejecución completa:

leninmhs@debian:~/komunal$ python inicial.py
Gtk-Message: Failed to load module “canberra-gtk-module”
SQLite cargado
QFont::setPointSize: Point size <= 0 (-1), must be greater than 0
SQLite cargado
Aqui en pdf indicadores
Traceback (most recent call last):
File “/home/leninmhs/komunal/indicadores.py”, line 139, in generarReporteIndicadores
doc.build( story )
File “/usr/lib/python2.7/dist-packages/reportlab/platypus/doctemplate.py”, line 1127, in build
BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
File “/usr/lib/python2.7/dist-packages/reportlab/platypus/doctemplate.py”, line 916, in build
self._endBuild()
File “/usr/lib/python2.7/dist-packages/reportlab/platypus/doctemplate.py”, line 858, in _endBuild
if getattr(self,’_doSave’,1): self.canv.save()
File “/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.py”, line 1209, in save
self._doc.SaveToFile(self._filename, self)
File “/usr/lib/python2.7/dist-packages/reportlab/pdfbase/pdfdoc.py”, line 215, in SaveToFile
filename = makeFileName(filename)
File “/usr/lib/python2.7/dist-packages/reportlab/lib/utils.py”, line 1395, in makeFileName
s = s.decode(‘utf8’)
AttributeError: ‘QString’ object has no attribute ‘decode’

la solución fue evitar que necesitara usar el decode utf8, entonces use en mi codigo:

unicode( variabletexto, “utf-8”)

cambiando entonces:

style=styleSheet['BodyText']
doc=SimpleDocTemplate( pdf_x_indicador ,pagesize=letter,leftMargin=10, rightMargin=10, topMargin=10, bottomMargin=10, title="Komunal - Reporte de Indicadores", author= "Komunal Beta" )
doc.build( story )

por

style=styleSheet['BodyText']
doc=SimpleDocTemplate( unicode( pdf_x_indicador, "utf-8") ,pagesize=letter,leftMargin=10, rightMargin=10, topMargin=10, bottomMargin=10, title="Komunal - Reporte de Indicadores", author= "Komunal Beta" )
doc.build( story )

 

Ciertamente caso extraño, todo en el sistema esta en utf8, fue desarrollado integro en entorno Linux y en efecto cada archivo .py su segunda linea es # -*- coding: utf-8 -*-

El cambio ya disponible en GitHub…

PD: por si hay dudas pdf_x_indicador es:

pdf_x_indicador = QtGui.QFileDialog.getSaveFileName(self, "Guardar Planilla Komunal (*.pdf)", QtCore.QDir.homePath() + "/indicadores-komunal.pdf", "Documento PDF (*.pdf)")
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s