/ docs / Formularios PDF.md
Formularios PDF.md
 1  ### Objetivo
 2  
 3  Tener un selector de normas y un selector de nivel de evaluación/componentes adicionales con selección múltiple. Se puede editar y guardar los datos siempre que se modifiquen desde Adobe Reader.
 4  ![[Pasted image 20250113112556.png]]
 5  
 6  ### Requisitos
 7  - Adobe Acrobat PRO.
 8  - PDF al que añadir el formulario.
 9  
10  ### Pasos
11  
12  1. Cargar PDF en Adobe.
13  2. Utilizamos la herramienta de "Preparar Formulario".
14  
15  #### Campos Scope_producto y Componentes_producto
16  
17  1. Creamos estos dos campos de manera normal, no necesitan ningún ajuste. 
18  #### Campo Norm_producto
19  
20  1. Creamos el menú desplegable y añadimos los posibles valores de manera normal.
21  2. En sus opciones, en la sección de validaciones.
22  3. Añadimos el siguiente fragmento Javascript.
23  ```javascript
24  var scope = this.getField("Scope_producto");
25  var components = this.getField("Componentes_producto");
26  
27  switch (event.value) {
28  	case "Common Criteria version 3.1 release 5":
29  	    scope.setItems([ 
30  		    "EAL1", "EAL2", //etc
31  	    ]);
32  	    components.setItems(["-",
33  		    "aco_cor.1",
34  		    "aco_dev.1",
35  		    // etc
36  	    ]);
37  	    break;
38  
39  	// añadimos para cada norma sus alcances y componentes adicionales repitiendo el código anterior.
40  	
41  	default:
42  		scope.setItems([]);
43  		components.setItems([]);
44  ```
45  
46  6. Exportar PDF y probar.
47  
48  #### Campo Resumen_producto
49  
50  Este campo extra mostrará el resultado si fuese de interés. Es completamente opcional.
51  
52  1. Creamos el campo de texto.
53  2. En opciones seleccionamos multilínea.
54  3. Añadimos en opciones el siguiente javascript durante la acción "Ratón dentro"
55  
56  ```javascript
57  var summary = [
58      this.getField("Norm_producto").value,
59      this.getField("Scope_producto").value
60  ];
61  
62  var components = this.getField("Componentes_producto").value;
63  if (components && components !== "-") {
64      summary.push(Array.isArray(components) ? components.join(", ") : components);
65  }
66  
67  this.getField("Resumen_producto").value = summary.join(", ");
68  ```
69  
70  Cada vez que pasemos el ratón sobre ese campo, la acción actualizará su contenido con los campos ya seleccionados.