Cómo realizar cálculos en campos específicos en un formulario PDF usando una macro de ONLYOFFICE

12 marzo 2025Por Dea

Las macros de ONLYOFFICE son potentes y versátiles, lo que las hace útiles no solo para automatizar tareas en documentos, hojas de cálculo y presentaciones, sino también en formularios PDF. En este artículo, te mostraremos cómo crear y ejecutar una macro única que realice cálculos en campos específicos dentro de un formulario. En este ejemplo, la macro ayuda a calcular impuestos, haciendo el proceso más rápido y preciso.

Cómo realizar cálculos en campos específicos en un formulario PDF usando una macro de ONLYOFFICE

Construyendo la macro

Recuperando todos los campos del documento

Primero, recuperamos todos los campos del documento:

// Get all forms from the document
    const document = Api.GetDocument();
    let forms = document.GetAllForms();
  • Api.GetDocument() obtiene el documento activo.
  • GetAllForms() recupera todos los campos de formulario en el documento

Definición de las claves de formulario 

Luego, definimos las claves de formulario:

  // Formkeys of input forms
    var formkey1 = "Form1";
    var formkey2 = "Form2";
    var taxFormkey = "TaxForm";

    // Formkeys of result forms
    var sumResultKey = "SumResult";
    var taxResultKey = "TaxResult";
  • formkey1, formkey2, y taxFormkey almacenan los identificadores de los campos de entrada.
  • sumResultKey and taxResultKey almacenan los identificadores de los campos de salida donde se insertarán los resultados.

Recuperando los valores del formulario

La función getFormValue recorre los formularios para encontrar uno que coincida con formKey:

  // Function to get the value of a form by its key
    function getFormValue(formKey) {
        for (let form of forms) {
            if (form.GetFormKey() === formKey) {
                return parseFloat(form.GetText()) || 0;
            }
        }
    }
  • GetText() recupera el valor de texto del formulario..
  • parseFloat() convierte el texto en un número.

Si la conversión falla, se asigna el valor 0 por defecto para evitar errores en los cálculos.

Insertando valores en los formularios 

La función setFormValue busca un campo de formulario que coincida con formKey. El método SetText() actualiza el campo con un valor numérico formateado (2 decimales).

  // Function to set the value of a result form
    function setFormValue(formKey, value) {
        for (let form of forms) {
            if (form.GetFormKey() === formKey) {
                form.SetText(value.toFixed(2));
            }
        }
    }

Cálculo principal

Dentro de la función de cálculo principal:

  • Recuperamos los valores de entrada del usuario desde los campos del formulario.
  • Calculamos la suma de input1 y input2.
  • Calculamos el impuesto como un porcentaje de la suma.
  • Llamamos a setFormValue() para insertar los resultados en sus respectivos campos.
 // Main calculation function
    function calculateAndInsert() {
        let input1 = getFormValue(formkey1);
        let input2 = getFormValue(formkey2);
        let taxInput = getFormValue(taxFormkey);
        // Perform calculations
        var sum = parseFloat(input1) + parseFloat(input2);
        var tax = sum * taxInput / 100; // % tax

        // Insert results
        setFormValue(sumResultKey, sum);
        setFormValue(taxResultKey, tax);
    }

El código completo de la macro es el siguiente:

(function () {
    // Get all forms from the document
    const document = Api.GetDocument();
    let forms = document.GetAllForms();
    // Formkeys of input forms
    var formkey1 = "Form1";
    var formkey2 = "Form2";
    var taxFormkey = "TaxForm";

    // Formkeys of result forms
    var sumResultKey = "SumResult";
    var taxResultKey = "TaxResult";

    // Function to get the value of a form by its key
    function getFormValue(formKey) {
        for (let form of forms) {
            if (form.GetFormKey() === formKey) {
                return parseFloat(form.GetText()) || 0;
            }
        }
    }

    // Function to set the value of a result form
    function setFormValue(formKey, value) {
        for (let form of forms) {
            if (form.GetFormKey() === formKey) {
                form.SetText(value.toFixed(2));
            }
        }
    }

    // Main calculation function
    function calculateAndInsert() {
        let input1 = getFormValue(formkey1);
        let input2 = getFormValue(formkey2);
        let taxInput = getFormValue(taxFormkey);
        // Perform calculations
        var sum = parseFloat(input1) + parseFloat(input2);
        var tax = sum * taxInput / 100; // % tax

        // Insert results
        setFormValue(sumResultKey, sum);
        setFormValue(taxResultKey, tax);
    }

    // Call the calculation function
    calculateAndInsert();
})();

Ahora, ¡vamos a ejecutar la macro y ver cómo funciona!

En ONLYOFFICE, nos esforzamos por ofrecer a los usuarios herramientas versátiles adaptadas a sus necesidades. Las macros son adiciones poderosas a tu conjunto de herramientas, y esperamos que esta se convierta en un activo valioso para ti.

También te animamos a explorar nuestra extensa biblioteca de métodos de la API y crear tus propias macros. Si tienes macros o ideas que compartir, no dudes en ponerte en contacto con nosotros: siempre estamos abiertos a sugerencias y colaboración. ¡Te deseamos mucho éxito en tus proyectos exploratorios!

Crea tu cuenta gratuita de ONLYOFFICE

Visualiza, edita y colabora en documentos, hojas, diapositivas, formularios y archivos PDF en línea.