Ver índice
Formularios en PDF

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Formularios en PDF

En páginas anteriores hemos tratado del tema relativo a los formularios como medio de intercambio de información entre el cliente y el servidor. La clase TCPDF nos permite desarrollar formularios en formato PDF con algunas ventajas comparativas respecto a los tradicionales. Algunas de ellas son las siguientes:

Los métodos que permiten incluir los distintos componentes de los formularios son los siguientes:

Cajas de texto

Este tipo de elemento puede ser utilizado de forma que cubra las necesidades de las entradas de texto, las entradas tipo password, las áreas de texto y también las tipo file. El método que permite insertarlas es el siguiente:

$objeto->TextField(nombre, ancho, alto, propiedades, anotaciones, x, y)

ValorUtilidad
nombre  Es el nombre identificador del elemento que servirá para asignar nombre a la variable que recoja su contenido cuando el formulario sea transferido al servidor.
ancho, alto  Son los valores del ancho y el alto del rectángulo contenedor. (**)
x, y  Son las coordenadas del puntos de inserción de la esquina superior izquierda del rectángulo contenedor del área de texto.
propiedades  Es un array asociativo que puede contener, entre otros, los siguientes elementos:
ElementoValorUtilidad
'required'booleano  Indica si ha de cumplimentarse obligatoriamente (true) o si no es requerido necesariamente (false). Su valor por defecto es false.
'value'cadena  Permite asignar un valor por defecto al elemento. Si no se incluye se cargará una cadena vacía.
'password'booleano  Cuando este valor se establece como true al teclear contenidos en el campo se visualizarían los típicos asteriscos de los campos tipo password.
'readonly'booleano  Permite, cuando se le asigna el valor true, impedir la modificación de los valores asignados por defecto.
'charLimit'numero  Permite limitar el número máximo de caracteres susceptibles de ser incluidos en ese campo.
'multiline'booleano  Cuando este valor se configura como true permite múltiples líneas y su comportamiento es idéntico al de los textarea del HMTL.
'fileSelect'booleano  Cuando se configura como true permite seleccionar ficheros de forma similar a los formularios HTML. Requiere ser complementado con un botón (en HTML se insertan simultáneamente) mediante el cual se ejecutará la acción que permita elegir el fichero a incluir.
'lineWidth' numero  Permite especificar el ancho de la línea que contornea el elemento. (*)
'borderStyle'cadena  Permite asignar un estilo al borde del elemento. Si se asigna la cadena 'solid' (valor por defecto) contorneará con una línea continua. Si se asigna 'dashed' lo hará con línea discontinua. (*)
'fillColor'array  Permite establecer un color de fondo asignado mediante un array definido como array(R,G,B) dónde R, G y B son los valores de las componentes de los colores primarios. (*)
'strokeColor'array  Permite establecer un color de fondo asignado mediante un array definido como array(R,G,B) dónde R, G y B son los valores de las componentes de los colores primarios. (*)
anotaciones  Permite incluir anotaciones de acuerdo con las especificaciones PDF32000_2008. Para nuestros fines no resulta necesario. Bastará que incluyamos este parámetro en forma de un array vacío: array()
(*) Este valor pueden asignados de forma global para todos los elementos del documento incuyéndolo el método setFormDefaultProp.
(**) Si se asigna cero a los valores ancho y alto no se visualizará el campo. Si se le asignara un value podría emular perfectamente los campos ocultos (hidden) de los formularios HTML.

Botón de opción

Este tipo de elemento puede ser utilizado de forma idéntica a la contemplada en los formularios HTML. El método que permite insertarlo es el siguiente:

$objeto->RadioButton( nombre, ancho, propiedades, anotaciones, valor, marcado, x, y)

El parámetro nombre permite identificar el elemento (y el valor de la variable al ser enviado el formulario) y ha de ser el mismo en los diferentes elementos que conforman las opciones de elección. Mediante ancho especificamos el ancho del botón de opción, las propiedades en este caso se limitan a las características gráficas ya señaladas para las cajas de texto. Las anotaciones tienen una funcionalidad y comportamiento similares (también aquí podemos incluir un array vacío).  El parámetro valor permite especificar el valor que se asignaría a la variable nombre en el caso de ser seleccionada la opción mientras que marcado es un valor booleano que en caso de estar configurado como true haría que la opción aparezca seleccionada por defecto. Los parámetros x e y son las coordenadas del punto de inserción del elemento.

Casillas de verificación

También se comportan de forma idéntica a los formularios HTML. El método que permite insertarlos es el siguiente:

$objeto->CheckBox(nombre, ancho, marcado, propiedades, anotaciones, valor, x, y)

Utiliza los mismos parámetros, y con idénticas funcionalidades, que el botón de opción. Las dos únicas diferencias a tener en cuenta es que se incluyen en distinto orden y que las casillas de verificación deben tener siempre nombres diferentes.

Cuadro de lista

Presenta un cuadro de lista desplegando las diferentes opciones que pueden ser seleccionadas. Si se configura adecuadamente pueden hacerse una selección múltiple. El método que permite insertarlo es el siguiente:

$objeto->ListBox(nombre, ancho, alto, valores, propiedades, anotaciones, x, y)

Casi todos los parámetros son los ya conocidos. Las diferencias respecto a lo comentado para el caso de cajas de texto se refieren a los valores y a las propiedades. En caso de los valores deberemos incluir un array escalar que contenga como valores las diferentes opciones posibles de la lista. En cuanto a propiedades pueden incluirse lo elementos de ese array asociativo relativos a la configuración gráfica y, además, un nuevo elemento: 'multipleSelection' un valor booleano que en caso de tener asignado el valor true permite seleccionar varios items de la lista (bastaría marcarlos manteniendo pulsada la tecla Ctrl).

Cuando se utiliza esta opción es muy importante tener la precaución de agregar unos corchetes al nombre del elemento. Por ejemplo: aficiones[] en vez de aficiones. De esta forma cuando los datos sean enviados al servidor PHP interpretará la variable como un array y podrá extraer de ella los diferentes valores seleccionados. Si se omitieran los corchetes PHP solo recogería el último de los valores seleccionados.

Si en el array propiedades incluyeramos un elemento con nombre 'value' y el asignáramos como valor una de las opciones ocurriría que al ser cargado el formulario aparecería seleccionada ese valor de forma automática.

Cuadro desplegable

Este tipo de elemento puede ser utilizado de forma idéntica a la contemplada en los formularios HTML. El método que permite insertarlo es el siguiente:

$objeto->ComboBox(nombre, ancho, alto, valores, propiedades, anotaciones, x, y)

Se comporta de forma muy similar a la descrita en el elemento anterior. Como es lógico no permite la propiedad multipleSelection. De igual forma que ocurría en aquel caso si se incluye la propiedad value aparecerá seleccionado el elemento correspondiente de la lista.

Respecto al array que contiene los valores caben dos posibilidades de inserción. La primera es la ya descrita para el caso anterior: (array('valor1','valor2','valor3')).

Alternativamente pueden usarse formas del tipo ( array (array ('item1','valor1'),array('item2','valor2'),array('item3','valor3') ) en la que en vez de los valores de los elementos se incluye un array de dos elementos por cada uno de ellos. El primer elemento de cada uno de esos arrays será el texto que aparecerá en el formulario y el segundo el valor que habría de asignarse al ser elegida esa opción. Es decir, se visualizaría item2 y se enviaría al servidor valor2 que es el valor asociado a el.

Botones

Los botones son elementos imprescindibles en el caso del manejo de formularios. El método que los incluye es este:

$objeto->Button(nombre, ancho, alto, caption, accion, propiedades, anotaciones, x, y)

Los parámetros nombre, ancho, alto, propiedades, anotaciones, x e y tienen idéntico significado que en casos anteriores (las propiedades se reducen a sus aspectos gráficos). Incorpora como elementos nuevos el parámetro caption que será una cadena con el texto que aparecerá en el propio botón y el parámetro accion que podrá incluir una llamada a una función de JavaScript o un array asociativo. Estos son algunos ejemplos del primer supuesto:

$objeto->Button('imprime', 30, 10, 'Imprimir', 'print()', $estilo, array() , 30, 265);

insertaría un botón con el estilo definido en $estilo en el que se visualizaría la palabra Imprimir y que al ser pulsado ejecutarla la función print() del sistema del usuario.

$objeto->Button('almacena', 30, 10, 'Imprimir', 'guardar()', $estilo, array() , 30, 265);

insertaría un botón con el estilo definido en $estilo en el que se visualizaría la palabra Guardar y que al ser pulsado ejecutarla la función JavaScript guardar() en el navegador del usuario. Las funciones JavaScript debe estar incluida en el propio documento pdf. Para ello la clase TCPDF dispone del método:

$objeto-> IncludeJS($texto_con_codigo_JavaScript)

dónde la variable $texto_con_codigo_JavaScript contiene el código JavaScript que se pretende incluir en el documento. En el supuesto anterior podría ser una función tal como esta: function guardar(){app.execMenuItem("SaveAs");}

Cuando se trata de enviar el formulario es necesario recurrir a un botón con las siguientes características:

$objeto->Button('submit', ancho, alto, 'Enviar', array('S'=>'SubmitForm','F'=>'xxxxx.php','Flags'=>array('ExportFormat','IncludeNoValueFields')), $estilo, array() , x, y );

en cuyo array asociativo son obligatorios los elementos: 'S' con valor 'SubmitForm' (que hará el envío del formulario); 'F' cuyo valor se la dirección del script que recogerá los resultados del envío 'xxxxx.php' (equivale a action en el formulario convencional de HTML) y elemento 'flags' ha de incluir un array conteniendo los valores 'ExportFormat' y 'IncludeNoValueFields'. De no hacerlo no se recibirían en el servidor los contenidos del formulario.

Cuando se trata de borrar el contenido del formulario es necesario recurrir a un botón con las siguientes características:

$objeto->Button('reset', ancho, alto, 'Borrar', array('S'=>'ResetForm'), $estilo, array() , x, y );

en cuyo array asociativo es obligatorio el elemento: 'S' con valor 'ResetForm' (que borrará los contenidos del formulario).

Ficheros adjuntos

El envío de ficheros adjuntos requiere el uso de tres elementos: un campo de texto, un botón y una función JavaScript.

$objeto->TextField( 'nombre_campo',ancho,alto,array('fileSelect'=>true),array(),x,y)

el campo de texto requiere la opción 'fileSelect'=>true

$objeto->Button( 'Sube',ancho,alto,'Seleccione el archivo', "Cargar('nombre_campo')", $estilo_boton)

el botón debe incluir el la llamada una función JavaScript en la que debemos incluir como argumento una cadena que ha de coincidir con el el nombre_campo asignado como nombre al campo de texto.

function Cargar(nombre){
var selecciona = this.getField(nombre);
selecciona.browseForFileToSubmit();
}

la funcion JavaScript tal como la estás viendo permite seleccionar un nombre de fichero y que de forma automática se incluya su nombre y su ruta en el campo de texto. El comportamiento es idéntico al caso de enviar ficheros desde los formularios HTML.

En el código fuente de este ejemplo puedes ver como hemos incluido las funciones JavaScript en una variable usando la sintaxis de documento incrustado.

ejemplo352.php Ver código fuente