Forum


Replies: 5   Views: 540
Checkbox funcional
Topic closed:
Please note this is an old forum thread. Information in this post may be out-to-date and/or erroneous.
Every phpdocx version includes new features and improvements. Previously unsupported features may have been added to newer releases, or past issues may have been corrected.
We encourage you to download the current phpdocx version and check the Documentation available.

Posted by rmartinez  · 27-09-2022 - 10:45

Hola de nuevo.

Necesito crear varios checkbox en un word en los que, después, se puedan marcar y desmarcar de manera fácil desde el Word.

He utilizado un código similar a este:

$checkbox = new WordFragment($docx, 'document');
$checkbox->addStructuredDocumentTag('checkbox', ['fontSize' => 9, 'checked' => true]);
$docx->addText([$checkbox, ['text' => ' Nombre', 'fontSize' => 9]]);

pero genera unos checkbox sin funcionalidad, es decir, no se pueden marcar o desmarcar después.

Sin embargo, directamente en word, desde el menú Programador, se puede insertar el tipo de checkbox que estoy buscando. ¿Es posible añadir un checkbox de este tipo con vuestra librería?

Gracias.

Saludos.

Posted by admin  · 27-09-2022 - 11:16

Hola,

Los elementos añadidos con addStructuredDocumentTag son de tipo block, por lo que no están diseñados para ser insertados como WordFragments de tipo inline. Al añadirlos como inline solo se muestran pero no se pueden modificar.
Para conservar toda su funcionalidad es necesario insertarlos como block:

$docx->addStructuredDocumentTag('checkbox', ['fontSize' => 9, 'checked' => true]);

al insertarlo en un array y luegio en addText, se añaden como contenido inline. Esto ocurre igual con otros elementos tipo block como pueden ser tablas, listas... no todos los tipos de contenido admiten ser añadidos como elementos inline.

Una opción alternativa sería utilizar el método addFormElement, que también permite añadir checkboxes de tipo form.

Saludos.

Posted by rmartinez  · 27-09-2022 - 11:39

La opción de incluir el checkbox como un elemento de formulario, te deja cambiar el estado pero es un poco incómodo (doble click sobre el checkbox, seleccionar el estado en una ventana emergente, click en aceptar), mientras que con el checkbox que se añade desde la pestaña de Programación, se le puede cambiar el estado haciendo un simple click sobre él. ¿No es posible añadir este tipo último tipo de checkbox?

Por otro lado, he intentado incluir el checkbox, sin incluirlo en un array, pero solo me aparece cuando está incluido en un array:

$checkbox = new WordFragment($docx, 'document');
$checkbox->addStructuredDocumentTag('checkbox', $checkboxOptions);
$wf = new WordFragment($docx, 'document');
$wf->addText([$checkbox]); // Se muestra "plano"
$wf->addText($checkbox); // No se muestra

¿Por qué ocurre esto?

Gracias.

Saludos.

Posted by admin  · 27-09-2022 - 11:46

Hola,

Los elementos tipo block se deben añadir invocando su método directamente, no mediante addText. El método addText los añade como contenido inline.

Es decir, directamente al documento:

$docx->addStructuredDocumentTag('checkbox', ['fontSize' => 9, 'checked' => true]);

O como elemento WordFragment utilizando addWordFragment u otros métodos compatibles con WordFragments de tipo block:

$wordFragment = new WordFragment($docx);
$wordFragment->addStructuredDocumentTag('checkbox', ['fontSize' => 9, 'checked' => true]);
$docx->addWordFragment($wordFragment);

Saludos.

Posted by rmartinez  · 27-09-2022 - 11:58

Ok, entendido. Tal y como indicas, para que el checkbox sea funcional, el elemento se tiene que insertar en modo bloque pero, entonces, ¿cómo podría generar en una sola línea un checkbox "funcional" acompañado de un texto?

Gracias.

Saludos.

Posted by admin  · 27-09-2022 - 12:01

Hola,

No es posible añadir ambos elementos en una sola línea con phpdocx. Al ser addStructuredDocumentTag de tipo block, se debe añadir el texto en una línea y en otra el structured document tag. Hemos añadido una tarea interna para incluir si es posible addStructuredDocumentTag también como elemento de tipo inline .

El equipo de desarrollo ha añadido en la rama testing soporte para trabajar con addStructuredDocumentTag como WordFragment inline. Será incluido en la próxima versión estable. Os hemos enviado un correo electrónico con más información.

Saludos.