обновленный вопрос
Используя шрифт, предоставленный OP, и перегрузку setValue
с дополнительными параметрами шрифта и размера шрифта, я мог бы воспроизвести проблему.
Актуальный выпуск
Проблема не связана с конкретным шрифтом или текстом, который вы использовали, она связана с используемой вами перегрузкой setValue
:
PdfFormField.setValue(String)
(если поле не является полем кнопки) перебирает всю иерархию потомков текущего поля и вызывает еще одну перегрузку setValue
для каждого потомка и, в конечном итоге, также текущее поле.
- С другой стороны,
PdfFormField.setValue(String, boolean)
и PdfFormField.setValue(String, PdfFont, float)
предполагают, что текущее поле фактически является единственным виджетом, к которому добавляется внешний вид.
Таким образом, любое поле формы с несколькими виджетами (или даже поле с одним виджетом, которое просто не объединено с полем) не будет получать надлежащий вид для своих виджетов, если просто перегрузка setValue
последнего вида призвал к этому.
Обходной путь
Учитывая вышесказанное, обходной путь должен заключаться в том, чтобы как-то работать с перегрузкой одного параметра setValue
. Это можно сделать, явно установив шрифт и размер шрифта в поле формы, просто заменив
textField.setValue("שלום", font, 11.0f);
от
textField.setFont(font);
textField.setFontSize(11f);
textField.setValue("שלום");
( SetTextField test testSetFontAndTextToFieldWithManyVisualizationsWorkAround
)
Теперь поля действительно заполнены, и их содержимое присутствует в сглаженном результате.
К сожалению, здесь появляется еще одна проблема: буквы появляются в неправильном порядке. Языки RTL здесь не поддерживаются с использованием только основных компонентов iText. Возможно использование дополнительного модуля pdfCalligraph добавляет поддержку иврита и т. Д., Но я не знаю.
Оригинальный ответ на оригинальный вопрос
Я не могу воспроизвести проблему с вашим примером документа.
Я изменяю значение поля следующим образом
PdfReader reader = new PdfReader(resource);
PdfDocument pdfDocument = new PdfDocument(reader, new PdfWriter(outputStream));
PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, false);
PdfFormField testField = acroForm.getField("test");
testField.setValue("My test text...");
acroForm.flattenFields();
pdfDocument.close();
( SetTextField test testSetTextToFieldWithManyVisualizations
)
но результат ожидаемый:
Заполнены все три экземпляра поля. Это работает как с выравниванием, так и без него, и с 7.1.4 и с текущим 7.1.5-SNAPSHOT.
Одна проблема, хотя, глядя на внутренности PDF-файла результата, который можно увидеть
Значение V устанавливается как в абстрактном поле, так и в каждом виджете. Это должно быть только в поле.