PDFBox U + 00A0 недоступен в кодировке этого шрифта
Я столкнулся с проблемой при вызове метода setValue PDField и попытке установить значение, которое содержит специальные символы.
field.setValue("TEST-BY (TEST)")
Подробно, если мое значение содержит символы как U+00A0, я получаю следующее исключение:
Вызвано: java.яз..IllegalArgumentException: U+00A0 не является доступно в кодировке этого шрифта: WinAnsiEncoding
Полный stracktrace можно найти здесь: Stacktrace
В настоящее время я установил PDType1Font.TIMES_ROMAN как шрифт. Чтобы решить эту проблему, я попытался использовать и другие доступные шрифты. Та же проблема не исчезла.
Я нашел следующее предложение в этом ответе https://stackoverflow.com/a/22274334/7434590 но поскольку мы используем setValue, а не любой из методов showText/drawText, которые могут манипулировать байтами, я не мог использовать этот подход, так как setValue принимает только строку в качестве параметра.
Примечание : я не могу заменить символы с другими, чтобы решить эту проблему, я должен быть в состоянии установить любой поддерживаемый символ шрифта в методе setValue.
1 ответ:
Вам придется встроить шрифт и не использовать WinAnsiEncoding:
Обратите внимание, что этот код должен быть выполнен перед вызовомPDFont formFont = PDType0Font.load(doc, new FileInputStream("c:/windows/fonts/somefont.ttf"), false); // check that the font has what you need; ARIALUNI.TTF is good but huge PDResources res = acroForm.getDefaultResources(); // could be null, if so, then create it with the setter String fontName = res.add(formFont).getName(); String defaultAppearanceString = "/" + fontName + " 0 Tf 0 g"; // adjust to replace existing font name textField.setDefaultAppearance(defaultAppearanceString);
setValue()
. Подробнее об этом в Разделе CreateSimpleFormWithEmbeddedFont.java пример из загрузки исходного кода.