Skip to content

net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Byte no válido 1 de la secuencia UTF-8 de 1 bytes is not a valid jrxml file #183

@maritogaleano

Description

@maritogaleano

Describe the bug

It happens when I want to test the generation of the .pdf from the Django shell, the code I use to be able to run it in the shell is:

import os
from django.conf import settings
from pyreportjasper import PyReportJasper
from decouple import config


class JasperReports:
    """Clase para generar reportes usando JasperReports con pyreportjasper"""

    def __init__(self):
        """Inicializa las rutas y la conexión a la base de datos"""
        self.reports_dir = os.path.join(settings.BASE_DIR, 'reports')
        self.jdbc_dir = os.path.join(settings.BASE_DIR, 'jdbc-drivers')  
        self.conn = {
            'driver': 'postgres',
            'username': config('DB_USER'),
            'password': config('DB_PASSWORD'),
            'host': config('DB_HOST'),
            'database': config('DB_NAME'),
            'schema': 'public',
            'port': config('DB_PORT', default='5432'),
            'jdbc_dir': self.jdbc_dir
        }

    def generate_report(self, report_name, output_name, parameters={}):
        """
        Genera un reporte JasperReport.

        :param report_name: Nombre del archivo `.jrxml` sin extensión (debe estar en `reports/`).
        :param output_name: Nombre del archivo de salida sin extensión (se guarda en `media/reportes/`).
        :param parameters: Diccionario con parámetros para el reporte.
        :return: Ruta del archivo PDF generado.
        """
        input_file = os.path.join(self.reports_dir, 'rptRecibo.jasper')
        output_file = os.path.join(settings.MEDIA_ROOT, f"reportes/{output_name}")

        # Configuración del reporte
        pyreportjasper = PyReportJasper()
        pyreportjasper.config(
            input_file=input_file,
            output_file=output_file,
            db_connection=self.conn,
            output_formats=["pdf"],
            parameters=parameters,
            locale="es_PY"
    
        )

        pyreportjasper.process_report()

        return f"{output_file}.pdf"

To Reproduce

From the django shell it would be as follows: 

Python 3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from utils.JasperReports import JasperReports
>>> jasper = JasperReports()
>>> pdf_path = jasper.generate_report('rptRecibo', 'recibo_123', {'P_ID': 54})
OpenJDK 64-Bit Server VM warning: Archived non-system classes are disabled because the java.system.class.loader property is specified (value = "org.update4j.DynamicClassLoader"). To use archived non-system classes, this property must not be set
12:28:29.388 [main] ERROR org.apache.commons.digester.Digester - Parse Fatal Error at line 1 column 1: Byte no válido 1 de la secuencia UTF-8 de 1 bytes
org.xml.sax.SAXParseException: Byte no válido 1 de la secuencia UTF-8 de 1 bytes
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204) ~[?:?]
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178) [?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) [?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:306) [?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:203) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:861) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224) [?:?]
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:637) [?:?]
        at org.apache.commons.digester.Digester.parse(Digester.java:1892) [commons-digester-2.1.jar:2.1]
        at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:269) [jasperreports-6.20.6.jar:6.20.6-5c96b6aa8a39ac1dc6b6bea4b81168e16dd39231]
        at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:256) [jasperreports-6.20.6.jar:6.20.6-5c96b6aa8a39ac1dc6b6bea4b81168e16dd39231]
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:245) [jasperreports-6.20.6.jar:6.20.6-5c96b6aa8a39ac1dc6b6bea4b81168e16dd39231]
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:223) [jasperreports-6.20.6.jar:6.20.6-5c96b6aa8a39ac1dc6b6bea4b81168e16dd39231]
Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Byte no válido 1 de la secuencia UTF-8 de 1 bytes       
        at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:702) ~[?:?]
        at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:568) ~[?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1699) ~[?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(XMLEntityScanner.java:1565) ~[?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1603) ~[?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:158) ~[?:?]
        ... 10 more
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Users\Usuario\Documents\Proyectos\aspreg\aspreg\AppWeb\utils\JasperReports.py", line 48, in generate_report
    pyreportjasper.process_report()
  File "C:\Users\Usuario\Documents\Proyectos\aspreg\aspreg\venv\lib\site-packages\pyreportjasper\pyreportjasper.py", line 192, in process_report
    raise error
NameError: Error fill report: input file: net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Byte no válido 1 de la secuencia UTF-8 de 1 bytes is not a valid jrxml file:
>>>

Screenshots

Image

Image

Desktop (please complete the following information):

  • OS: Windows 10.0.26100
  • Python version: Python 3.10.0
  • Library version: 2.1.4
  • Java version: openjdk version "19.0.2" 2023-01-17
  • JVM: OpenJDK 64-Bit Server VM Temurin-19.0.2+7 (build 19.0.2+7, mixed mode, sharing)

Jaspersoft Studio

  • Version: 7.0.1

Additional context
Add any other context about the problem here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions