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.

Redimensionando imágenes en la plantilla docx de Docassemble

Generalmente, como se describe aquí, las imágenes cargadas en DocAssemble (DA) se pueden colocar en la plantilla con la etiqueta correspondiente de Jinja2 definida en el archivo YAML de DA como:


pregunta: |
Por favor, carga una foto de ti mismo.
campos:
- Imagen: user_picture
tipo de dato: archivo

Si {{ user_picture }} se escribe en algún lugar de la plantilla docx, la imagen se colocará allí. (ver doc)

Pero, ¿cómo puedo influir en el tamaño de la imagen en el archivo docx posterior?

No hay filtros de Jinja2 que sean aplicables. La única solución que encontré fue que DocAssemble usa el paquete docxtpl y en la documentación hay un método para reemplazar imágenes en docx:


tpl.replace_pic('dummy_header_pic.jpg','header_pic_i_want.jpg')

Pero no encuentro la forma correcta de llamar a este método desde el archivo YAML de DA.
¿Cuál es la mejor práctica para colocar imágenes con un ancho y alto definidos en una plantilla docx con DocAssemble?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para insertar imágenes con un ancho y alto definidos en una plantilla docx con DocAssemble, puedes utilizar el método replace_pic del paquete docxtpl. Esto se puede hacer definiendo una función personalizada en el archivo YAML de DocAssemble que llame al método replace_pic con los argumentos correspondientes.

    Por ejemplo, podrías agregar el siguiente código a tu archivo YAML de DocAssemble:

    functions:
      - name: resize_image
        code: |
          from docxtpl import DocxTemplate
          def resize_image(doc, old_pic, new_pic, width=None, height=None):
              tpl = DocxTemplate(doc)
              tpl.replace_pic(old_pic, new_pic, width=width, height=height)
              tpl.save(doc)
    

    Esto crea una función personalizada llamada resize_image que toma cuatro argumentos: el nombre del archivo de la plantilla docx, el nombre del archivo de imagen original, el nombre del archivo donde guardar la imagen redimensionada, y el ancho y/o alto deseado de la imagen.

    Luego, puedes llamar a esta función desde tu plantilla docx utilizando la sintaxis de Jinja2:

    {% set user_picture = 'ruta/a/imagen_usuario.jpg' %}
    {% set resized_picture = 'ruta/a/imagen_redimensionada.jpg' %}
    {% set width = 300 %}
    {% set height = 200 %}
    
    {% call resize_image('ruta/a/plantilla.docx', user_picture, resized_picture, width=width, height=height) %}
    
    {{ resized_picture }}
    

    En este ejemplo, primero definimos las rutas de las imágenes original y redimensionada, así como el ancho y alto deseados. Luego llamamos a la función resize_image, pasándole la ruta del archivo de plantilla, la ruta de la imagen original, la ruta de la imagen redimensionada y los argumentos de ancho y alto. Finalmente, mostramos la ruta de la imagen redimensionada utilizando la sintaxis de Jinja2.

    Cabe destacar que para que esto funcione, el paquete docxtpl debe estar instalado en tu sistema. Puedes instalarlo utilizando pip:

    pip install docxtpl
    

    En resumen, este enfoque proporciona una forma sencilla y flexible de redimensionar imágenes en plantillas de DocAssemble utilizando Jinja2 y el paquete docxtpl.

Comments are closed.