es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Soporte para la conversión de HTML a PDF en diferentes idiomas mediante weasyprint

Tengo un código HTML en el cual algunos textos están en hindi. Cuando convierto el archivo HTML a PDF utilizando la biblioteca weasyprint, el PDF generado se ve así:

enter image description here

Este es mi código para la conversión:

from weasyprint import HTML
output = open('kt.html', 'rb')
html = HTML(output)
html.write_pdf(target='ouput.pdf')

Intenté usar la codificación también, pero obtuve este error:

TypeError: No se puede establecer una codificación con una entrada de unicode, establecer [‘override_encoding’, ‘transport_encoding’]

¿Cómo puedo solucionar este problema?

EDIT:
El código HTML se ve así:

enter image description here

La vista previa en el navegador del HTML se ve así:

enter image description here

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que la biblioteca weasyprint no admite caracteres no ASCII (como el idioma hindi) de forma predeterminada. Por lo tanto, debemos establecer la fuente para los caracteres hindi de forma explícita.

    Para resolver este problema, debemos seguir los siguientes pasos:

    1. Descargar la fuente que admite el idioma hindi. Por ejemplo, puedes descargar la fuente Noto Sans Devanagari desde https://www.google.com/get/noto/#sans-deva.
    2. Guardar la fuente descargada en una carpeta, digamos ‘fonts’.
    3. Actualizar el código para usar la fuente al escribir el archivo PDF.

    El código actualizado se verá así:

    from weasyprint import HTML
    from weasyprint.fonts import FontConfiguration
    
    # establecer la configuración de la fuente con la ruta de la fuente descargada
    font_config = FontConfiguration()
    font_config.add_font('fonts/NotoSansDevanagari-Regular.ttf', 
                          name='noto', 
                          bold='fonts/NotoSansDevanagari-Bold.ttf',
                          italic='fonts/NotoSansDevanagari-Italic.ttf',
                          bold_italic='fonts/NotoSansDevanagari-BoldItalic.ttf')
    
    # leer el archivo HTML
    with open('kt.html', 'rb') as input_file:
        html_data = input_file.read()
    
    # convertir HTML a PDF y usar la configuración de la fuente
    HTML(string=html_data).write_pdf(target='output.pdf', font_config=font_config)
    

    En este código actualizado, hemos agregado la configuración de la fuente que incluye la ruta de la fuente descargada. También hemos utilizado el modo rb al abrir el archivo HTML. Finalmente, al escribir el archivo PDF, hemos utilizado la configuración de la fuente como parámetro.

    Esto debería solucionar el problema y generar el archivo PDF con los caracteres hindi correctamente mostrados.

Comments are closed.