Tips & Tricks

Как добавить поля авторасчета в заполняемую форму PDF

Заполняемая PDF-форма, в которой автоматически суммируются позиции, рассчитываются налоги или суммируются счета, принципиально отличается от документа, в котором получатель должен выполнять математические расчеты самостоятельно. Поля авторасчета превращают статическую форму в работающий калькулятор. Получатель вводит количество и тарифы, а форма вычисляет итоговые суммы в режиме реального времени прямо у него на глазах. Для счетов-фактур, заказов на покупку, отчетов о расходах и любых форм, в которых числа должны складываться правильно, авторасчет — это разница между формой, которая помогает пользователю, и той, которая создает дополнительную работу.

Для добавления полей вычислений в PDF-файл требуется редактор форм, поддерживающий сценарии полей на основе JavaScript, поскольку вычисления PDF выполняются на упрощенной версии JavaScript, встроенной во все основные средства просмотра PDF-файлов. Настройка включает в себя три этапа: создание полей ввода, в которых пользователи вводят числа, создание поля вывода, в котором отображается результат, и написание сценария расчета, который связывает их вместе. После настройки расчет запускается автоматически всякий раз, когда пользователь меняет значение. Не требуется ни сохранение, ни обновление, ни нажатие кнопки.

How to Add Auto-Calculation Fields in a Fillable PDF Form

Понимание типов полей PDF и их совместной работы

Прежде чем писать какой-либо сценарий расчета, необходимо понять три типа полей, которые участвуют в расчете. Текстовые поля принимают вводимые пользователем данные. Их можно настроить на прием только чисел, только дат или любого текста. Для форм расчета текстовые поля, содержащие только числа, являются стандартным типом ввода. Каждое поле имеет уникальное имя, на которое ссылается сценарий расчета. Единообразное именование, например «Item1_Qty», "Item1_Rate," "Элемент1_Итого," делает логику вычислений читабельной и удобной в сопровождении.

Раскрывающиеся списки и переключатели также могут использоваться в расчетах. Раскрывающийся список может позволить пользователю выбрать продукт, и соответствующая цена автоматически заполнит поле цены из справочной таблицы. Флажками можно переключать, включена ли дополнительная плата. Ключевая идея заключается в том, что любое поле со значением может быть частью вычисления. Скрипт считывает текущее значение каждого поля ввода, выполняет математические вычисления и записывает результат в поле вывода.

Поля вывода обычно доступны только для чтения, чтобы пользователь не мог случайно перезаписать вычисленный результат. Вычисляемое поле, доступное только для чтения, создает четкое разделение между числами, которыми управляет пользователь, и числами, которыми управляет форма. Это различие важно для целостности формы. Если бы пользователь мог редактировать сумму, вычисления могло бы и не существовать.

WukongPDF

Попробуйте редактировать PDF

Никакой установки не требуется. Работает прямо в вашем браузере.

Начать →

Пошаговая инструкция: создание простой формы автоматического расчета

Начните с создания полей ввода. В редакторе PDF Forms выберите инструмент «Поля формы» и разместите текстовые поля для каждого значения, которое пользователь должен ввести. Для счета-фактуры это может быть поле количества и поле цены за единицу для каждой позиции. Дайте каждому полю четкое и уникальное имя. Избегайте пробелов и специальных символов в именах полей, поскольку JavaScript ссылается на них как на имена переменных. Вместо этого используйте символы подчеркивания или верблюжий регистр: "item1_qty" а не «Кол-во позиции 1».

Затем создайте поле вывода, в котором будет отображаться рассчитанная сумма. Разместите его в логическом месте, обычно внизу столбца чисел или в разделе итогов. В свойствах поля сделайте это поле доступным только для чтения. Это важно. Редактируемое поле вычислений сводит на нет всю цель автоматизации математических вычислений.

Теперь откройте свойства расчета для поля вывода. В редакторе WukongPDF выберите поле итога, откройте вкладку «Расчет» в свойствах поля и выберите «Пользовательский сценарий расчета». Откроется редактор сценариев, в котором вы пишете код JavaScript, выполняющий вычисления. Простой итог по отдельной позиции выглядит следующим образом: event.value = this.getField("item1_qty").value * this.getField("item1_rate").value;. Значение "event.value" — результат, отображаемый в поле. "this.getField()" извлекает текущее значение другого поля по имени. Вы можете объединить несколько вычислений и сложить их в общую сумму: event.value = this.getField("line1_total").value + this.getField("line2_total").value + this.getField("line3_total").value;.

После написания сценария немедленно протестируйте его. Сохраните форму, откройте ее в программе просмотра PDF, введите числа в поля ввода и наблюдайте за обновлением вычисляемого поля. Нажмите Tab для перемещения между полями, что запускает перерасчет. Введите букву в числовое поле и посмотрите, что произойдет. Сценарий должен обрабатывать или корректно игнорировать нечисловые входные данные. Если сумма показывает «NaN»; (Не число), одно из полей ввода содержит что-то, не являющееся числом, и скрипту требуется проверка. Добавьте защитное предложение, например: var qty = Number(this.getField("item1_qty").value) || 0; Это преобразует значение поля в число и по умолчанию принимает значение 0, если преобразование завершается неудачей, предотвращая каскадное использование NaN в вычислениях.

Обработка краевых случаев: пустые поля, отрицательные числа и деление на ноль

Сценарий расчета, который отлично работает с тестовыми данными, может потерпеть неудачу, когда форму заполняет реальный пользователь. Самая распространенная ошибка — пустое поле. Когда пользователь еще ничего не ввел в поле, его значением является пустая строка, а не ноль. Умножение пустой строки на число дает NaN, которое затем распространяется на все вычисления, зависящие от этого результата.

Исправление состоит в том, чтобы нормализовать каждое входное значение до нуля, когда оно пусто. В верхней части каждого сценария расчета извлеките каждое значение поля и преобразуйте его: var qty = this.getField("qty").value; if (qty === "" || isNaN(qty)) qty = 0; Этот шаблон, последовательно применяемый к каждому полю ввода, устраняет проблему пустых полей. Он также обрабатывает случай, когда пользователь случайно вводит букву в числовое поле, что в противном случае привело бы к результату NaN.

Отрицательные числа требуют политического решения. Должна ли форма принимать отрицательные количества? В большинстве бизнес-форм ответ отрицательный, и сценарий расчета должен обеспечивать следующее: if (qty < 0) qty = 0;. Деление на ноль — более тонкая проблема, возникающая при расчете процентов и ставок. Если поле, служащее знаменателем, может быть нулевым, скрипт должен проверить перед делением: if (denominator !== 0) { result = numerator / denominator; } Еще {результат = 0; }. Эти защитные предложения добавляют несколько строк кода и не позволяют форме отображать вводящие пользователя в заблуждение значения ошибок.

Расширенные вычисления: условная логика и таблицы поиска

Базовая арифметика обрабатывает итоговые суммы по отдельным позициям и общие итоги. Более сложные формы требуют условных вычислений, которые изменяются в зависимости от выбора пользователя. Типичным примером является расчет налога, где ставка налога зависит от выбранного штата или провинции. Сценарий расчета считывает значение раскрывающегося поля и применяет соответствующую ставку: var state = this.getField("state").value; вар скорость = 0; if (состояние === «CA») скорость = 0,0725; иначе, если (штат === «Нью-Йорк») ставка = 0,04; event.value = промежуточный итог * ставка;

Для больших таблиц поиска со многими параметрами оператор переключения или объект поиска проще, чем цепочка условий if-else. varставки = { "CA": 0,0725, "NY": 0,04, "TX": 0,0625, "FL": 0,06 }; var ставка = ставки[состояние] || 0; Этот шаблон масштабируется до десятков записей, не становясь при этом нечитаемым. Значение по умолчанию, равное нулю, предоставляется оператором || оператор корректно обрабатывает состояния, отсутствующие в таблице поиска.

Уровни скидок — еще один распространенный вариант условного использования. Если промежуточный итог превышает пороговое значение, примените процентную скидку: var Discount = 0; if (промежуточный итог > 1000) скидка = промежуточный итог * 0,10; иначе, если (промежуточный итог > 500) скидка = промежуточный итог * 0,05; event.value = промежуточный итог — скидка + налог;. Расчет выполняется каждый раз при изменении любого поля, поэтому скидка обновляется автоматически, когда пользователь добавляет или удаляет товары. Пользователь видит изменение цены в режиме реального времени, что является именно интерактивным интерфейсом, благодаря которому форма Fillable PDF воспринимается как приложение, а не как лист бумаги.

Проверка формы расчета перед ее отправкой

Форма расчета, которая не была протестирована, — это форма, которая выдает неправильные цифры. Систематическое тестирование выявляет ошибки до того, как они достигнут клиента или заказчика. Сначала протестируйте нормальные значения: введите числа, которые вы можете посчитать в уме, и проверьте совпадение результатов. Затем проверьте крайние случаи: оставьте поля пустыми, введите ноль, введите отрицательные числа, если бизнес-правила должны их отклонять, введите очень большие числа для проверки на переполнение и введите текст в числовые поля.

Протестируйте несколько программ просмотра PDF. Форма, которая правильно рассчитывается в Adobe Acrobat, может вести себя по-разному в Preview на Mac, во встроенном средстве просмотра PDF в веб-браузере или в мобильном приложении PDF. Каждый просмотрщик реализует движок JavaScript немного по-своему. Некоторые программы просмотра для мобильных устройств вообще не поддерживают PDF JavaScript и отображают поля формы без каких-либо функций вычислений. Если в вашу аудиторию входят мобильные пользователи, добавьте в форму примечание о том, что для вычислений требуется настольная программа просмотра PDF-файлов, или предоставьте заранее рассчитанную справочную таблицу в качестве запасного варианта.

Наконец, протестируйте рабочий процесс пользователя от начала до конца. Откройте форму, как если бы вы были получателем. Заполните его в том порядке, в котором это сделал бы реальный пользователь. Сохраните это. Снова откройте сохраненную копию и убедитесь, что расчеты верны. Распечатайте его и убедитесь, что рассчитанные значения появятся на бумаге. Форма, которая выглядит правильно на экране, но печатает пустые вычисляемые поля, является на удивление распространенным типом сбоя, вызванным тем, что значения полей механизма печати отличаются от значений в средстве рендеринга экрана. Час, потраченный на тщательное тестирование, — ничто по сравнению с ущербом от отправки 500 клиентам формы счета, в которой их итоговые суммы указаны неправильно.

Когда электронная таблица — лучший инструмент

Расчеты в PDF-формах эффективны, но у них есть ограничения, из-за которых электронная таблица может оказаться более подходящим выбором. Расчеты PDF не могут ссылаться на внешние источники данных. Они не могут получать текущие обменные курсы, цены акций или значения базы данных. Они не могут выполнять итеративные вычисления, такие как функции поиска цели или решения. Они не могут создавать диаграммы или сводные таблицы на основе введенных данных. Если ваша форма требует какой-либо из этих возможностей, создайте логику вычислений в Excel или Google Sheets и экспортируйте результат в PDF, а не пытайтесь воспроизвести функциональность электронной таблицы внутри PDF-файла.

Расчеты в формате PDF идеально подходят для форм, в которых математика проста и входные данные ограничены: счета-фактуры с фиксированными позициями, формы заказов с известными ценами на продукты, отчеты о расходах с предопределенными категориями и табели учета рабочего времени со стандартными почасовыми ставками. Форма выполняет одну функцию, делает это надежно и не требует от получателя обучения использованию. PDF Editor WukongPDF хорошо справляется с этой задачей, сочетая создание полей формы с поддержкой вычислений JavaScript в одном инструменте на базе браузера. При правильном использовании хорошо продуманная форма расчета в формате PDF исключает последующие электронные письма о математических ошибках, ускоряет время обработки и обеспечивает более профессиональный опыт, чем статическая форма, сопровождаемая отдельным калькулятором.

WukongPDF

Попробуйте редактировать PDF

Никакой установки не требуется. Работает прямо в вашем браузере.

Начать →