Como executar cálculos em campos específicos em um formulário PDF usando uma macro do ONLYOFFICE
As macros do ONLYOFFICE são poderosas e versáteis, o que as torna úteis não apenas para automatizar tarefas em documentos, planilhas e apresentações, mas também em formulários PDF. Nesta postagem do blog, mostraremos como criar e executar uma macro exclusiva que realiza cálculos em campos específicos dentro de um formulário. Neste exemplo, a macro ajuda a calcular impostos, tornando o processo mais rápido e preciso.

Construindo a macro
Recuperando todos os formulários do documento
Primeiro recuperamos todos os campos do documento:
// Get all forms from the document
    const document = Api.GetDocument();
    let forms = document.GetAllForms();
- Api.GetDocument() obtém o documento ativo.
 - GetAllForms() recupera todos os campos do formulário no documento
 
Definindo chaves de formulário
Em seguida, definimos as chaves do formulário:
  // 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, e taxFormkey armazena os identificadores dos campos de entrada.
 - sumResultKey e taxResultKey armazena os identificadores dos campos de saída onde os resultados serão inseridos.
 
Recuperando valores de formulário
O getFormValue a função itera pelos formulários para encontrar um formulário correspondente 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 o valor do texto do formulário.
 - parseFloat() converte o texto em um número.
 
Se a conversão falhar, o padrão será 0 para evitar erros nos cálculos.
Inserindo valores em formulários
O setFormValue a função procura um campo de formulário correspondente formKey. O SetText() o método atualiza o campo com um valor numérico formatado (2 casas decimais).
  // 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 da função de cálculo principal nós:
- Recupere valores de entrada do usuário de campos de formulário.
 - Calcule a soma de input1 e input2.
 - Calcule o imposto como uma porcentagem da soma.
 - Chamar setFormValue() para inserir resultados em seus 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);
    }
O código completo da macro é o seguinte:
(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();
})();
Agora, vamos executar a macro e ver como ela funciona!
No ONLYOFFICE, nos esforçamos para fornecer aos usuários ferramentas versáteis adaptadas às suas necessidades. Macros são adições poderosas ao seu kit de ferramentas, e esperamos que esta se torne um recurso valioso para você.
Também o encorajamos a explorar nossa extensa biblioteca de métodos da API e crie suas próprias macros. Se você tiver macros ou ideias para compartilhar, sinta-se à vontade para falar conosco – estamos sempre abertos a sugestões e colaboração. Boa sorte em seus esforços exploratórios!
Crie sua conta gratuita no ONLYOFFICE
Visualize, edite e colabore em documentos, planilhas, slides, formulários e arquivos PDF online.


