Это ошибка в PDFBox (1.8.x и 2.x) при заполнении форм PDF, которая возникает только в том случае, если в исходной форме несколько полей совместно используют один и тот же XObject в качестве потока оформления.
Подробно
Ваш исходный документ содержит много пустых текстовых полей.Несколько их подмножеств имеют общий внешний вид, например, «Атлетика» и «Религия»:
Asвы можете видеть, что они оба совместно используют объект XObject в PDF 479.
Когда PDFBox заполняет значения формы, он сначала устанавливает значение «Атлетика» равным «1», а также обновляет внешний вид XObject, чтобы показать «1", а затем он устанавливает значение" Religion "в" 9 "и обновляет внешний вид XObject, чтобы показать" 9 ".Конечный результат: в средстве просмотра «Атлетика» и «Религия» в качестве значения отображается «9».
Проблема заключается в том, что PDFBox предполагает, что он может просто обновить существующего потока внешнего вида при настройке.значение поля формы.На самом деле он должен заменить его, возможно, также словарь AP , если он оказывается косвенным, так как он также может использоваться совместно.
Обходной путь
Обходной путь в вашем случае - отбросить существующие пустые появления перед установкой поля:
field.getDictionary().removeItem(COSName.AP)
field.value = temp.toString()
(Возможно, эту строку можно сократить в Котлине до field.dictionary.removeItem(COSName.AP)
, но я почти ничего не знаю оKotlin ...)
Фоны
Можно задаться вопросом, допустима ли вообще конструкция, найденная здесь в исходном PDF (то есть потоки внешнего вида, совместно используемые несколькими текстовыми полями).Но на самом деле я не смог найти ничего, запрещающего это в спецификации PDF, напротив, следующий раздел об аннотациях в целом (виджеты полей формы - это специальные аннотации) может быть явно разрешен:
Aна данный словарь аннотаций следует ссылаться из массива Annots только одной страницы.Это требование применяется только к самому словарю аннотаций, но не к вспомогательным объектам, которые могут совместно использоваться несколькими аннотациями.
(как ISO 32000-1, так и ISO 32000-2, раздел 12.5.2 «Словари аннотаций»)