Когда поле формы заполняется значение поля заполняется и (по желанию) визуальный внешний вид для поля формы генерируются отражающим новый заданное значение. Поэтому причина, по которой вы видите значение при нажатии в поле формы, заключается в том, что будет отображаться значение поля, но пока поле не активируется, используется внешний вид полей.
Если вы попытались установить значение с помощью PDFBox 1.8, вы можете попробовать использовать PDFBox 2.0, так как теперь он поддерживает юникод, и создание внешнего вида переделано.
Вы также должны убедиться, что шрифт, который вы используете в форме, доступен в системе, в которой вы заполняете форму. В противном случае с PDFBox 2.0 вы можете получить сообщение об ошибке, подобное
Warning: Using fallback font 'TimesNewRomanPSMT' for 'MingLiU'
Exception in thread "main" java.lang.IllegalArgumentException: No glyph for U+5185 in font MingLiU
которое как MingLiu не доступен в системе он был заменен TimesNewRomanPSMT, который не имеет характера необходимо.
В качестве другого решения вы можете также направить Adobe Reader, чтобы вычислить внешний вид для вас, когда форма открыта с помощью
PDAcroForm form = doc.getDocumentCatalog().getAcroForm();
form.setNeedAppearances(true);
снова используя PDFBox 2.0
Я создал небольшую выборку, используя PDFBox 2, но создавая форму с нуля, чтобы проверить, может ли она обрабатывать китайский текст
// create a new PDF document
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
// add a new AcroForm and add that to the document
PDAcroForm form = new PDAcroForm(doc);
doc.getDocumentCatalog().setAcroForm(form);
// Add and set the resources and default appearance at the form level
PDFont font = PDType0Font.load(doc, new File("/Library/Fonts/Arial Unicode.ttf"));
PDResources res = new PDResources();
COSName fontName = res.add(font);
form.setDefaultResources(res);
String da = "/" + fontName.getName() + " 12 Tf 0 g";
form.setDefaultAppearance(da);
// add a page to the document
doc.addPage(page);
// add a form field to the form
PDTextField textBox = new PDTextField(form);
textBox.setPartialName("Chinese");
form.getFields().add(textBox);
// specify the annotation associated with the field
// and add it to the page
PDAnnotationWidget widget = textBox.getWidget();
PDRectangle rect = new PDRectangle(100f,300f,120f,350f);
widget.setRectangle(rect);
page.getAnnotations().add(widget);
// set the field value
textBox.setValue("木兰辞");
doc.save("ChineseOut.pdf");
который отлично работает. Я также тестировал шрифт, который вы используете, к сожалению, это имело ошибку, поскольку MingLiU - это коллекция TrueType, которую PDFBox не может обрабатывать в этот момент времени.
Вы экспортировали из правильно заполненной формы и сравнили это (X) FDF с тем, что у вас есть? –
Я экспортировал правильно заполненную форму в fdf, а затем попытался использовать это, чтобы заполнить ту же форму и имел тот же отказ. –
ОК, я попросил, чтобы убедиться, что FDF действительно правильный, что, по-видимому, есть. Если ничего свободного/ОС не работает, и это оправдывает некоторые инвестиции, вы можете посмотреть на FDFMerge от Appligent (возможно, сначала свяжитесь с ними о специфике). –