Проблема в том, что при определенных условиях PDFBox не создает внешний вид для полей, он устанавливает значение, и, следовательно, при выравнивании полностью забывает содержимое поля:
// in case all tests fail the field will be formatted by acrobat
// when it is opened. See FreedomExpressions.pdf for an example of this.
if (actions == null || actions.getF() == null ||
widget.getCOSObject().getDictionaryObject(COSName.AP) != null)
{
... generate appearance ...
}
(org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceValue(String)
)
Т.е. если для форматирования значения, связанного с полем, есть действие JavaScript, а поток показов отсутствует, PDFBox предполагает, что ему не нужно создавать внешний вид (и, вероятно, будет в любом случае это неправильно, так как оно не использует это действие форматирования).
В случае использования, позже сглаживающего форму, это предположение PDFBox, очевидно, неверно.
Чтобы заставить PDFBox генерировать внешний вид для этих полей также просто удалите действия перед установкой значений полей:
if (field instanceof PDTextField) {
PDTextField textField = (PDTextField) field;
textField.setActions(null);
textField.setValue(Integer.toString(i));
}
(из FillAndFlatten test testLikeAbubakarRemoveAction
)