Формат PDF знает только строковые значения текстовых полей AcroForm.Код JavaScript, прикрепленный к полям, может содержать только числовые символы, но iText не выполняет никакого JavaScript при установке значений полей.
Таким образом, относительно вашего исходного вопроса
Проблема заключается в методе setValue,но я не нашел ничего в документации о том, как передать целочисленное значение.Итак, как передать целочисленное значение?
Не существует такого понятия, как специальный метод iText для установки целых значений.
ВЗатем выяснилось, что исходный вопрос для целочисленного значения не был актуальным.Вместо этого:
Дело в том, что когда я использую Adobe Reader для ручного ввода числового значения, работает функция суммы в последней строке PDF (4 | 5 | 6 -> 15), поэтомуЕсть ли способ сделать это с itext?
Таким образом, фактическая проблема заключается в том, что вычисленное содержимое поля не обновляется после изменения iText.
Причина этого заключается в том, чтоэта функция в PDF-файлах реализована с помощью некоторого кода JavaScript в PDF-файле, вычисляющего сумму в случае какого-либо события, но iText (ядро) не выполняет никакого JavaScript-кода при редактировании полей формы (так как он изменяет их не через графический интерфейс, а сразу, события)не будет применяться напрямую в любом случае).
Таким образом, вам также придется рассчитать сумму и задать поле суммы самостоятельно.
Я могу рассчитать суммуи поместите его в правильное поле, но если я сделаю это, а затем по строке я открою Adobe Reader для ввода числа, скорее всего, функция js не сможет сделать «12» (рассчитанный мной,поместил его как строку) + 5 (ручной ввод целого числа в строке выше суммы).
Значение поля всегда сохраняется в виде строки в PDF.Таким образом, не должно иметь значения, как была задана эта строка, iText или Adobe.
После того, как вы поделились PDF-файлом, я мог взглянуть на его структуру и JavaScript в нем.
Действительно, это форма AcroForm (а не форма XFA!), И вычисление суммы и среднего происходит в функциях JavaScript, установленных как дополнительное действие для вычисления ( C ) ( AA )соответствующего итого или среднего поля.Поля для суммирования или усреднения определяются именами полей, например, для имени поля "1-Place_Total" скрипт вычисляет total по содержимому полей "1-Place_1" .. "1-Place_12 ".
var srcName = event.target.name;
var srcCategory = srcName.substring(srcName.indexOf("_")+1)
var baseName = srcName.replace("Total","").replace("Average","");
var total = Number(0);
var lastMonth = 0;
for(i=1; i < 13; i++){
var thisMonth = baseName + i;
var monthVal = this.getField(thisMonth).value;
total = Number(total) + Number(monthVal);
if(monthVal > 0){
lastMonth = i;
}
}
if(total == 0){
event.value = "";
}
else if(srcCategory == "Total"){
event.value = total;
}
else if(srcCategory == "Average"){
event.value = total / lastMonth;
}
Дополнительное действие поля" вычислить "в поле формы задается как
Действие JavaScript, которое должно быть выполнено для пересчета значения этого поля, когда оно используется для другогополе меняется.(Имя C означает «вычислить».)
(ISO 32000-1, таблица 196 - Записи в словаре дополнительных действий поля формы)
Поскольку скрипт немедленно берет значения из соответствующих полей (не где-то особенное, где их могли бы хранить некоторые другие скрипты), вам достаточно будет вручную изменить произвольное значение поля в PDF для запускаэта функция для расчета суммы всех применимых полей, независимо от того, были ли установлены отдельные значения полей iText или Adobe.
Дробные числа могут все еще быть проблемой в таком сценарии, поскольку десятичный разделитель может отличатьсяво внешнем виде и значении поля, но, как вы просили метод для установки целых значений, я предполагаю, что это не должно быть проблемой.
Я должен признать, что я не проверял это, ответ основан только на спецификации.Если вы создадите концептуальное подтверждение и заметите, что он не работает, поделитесь этим кодом, а затем я рассмотрю его более подробно.