Java PDFBox установка пользовательского шрифта для нескольких полей в PDF-форме
Я использую Apache PDFBox для чтения заполняемой формы PDF и заполнения полей на основе некоторых данных. Я использую приведенный ниже код (согласно предложениям из других ответов SO), чтобы получить строку внешнего вида по умолчанию и меняю ее (как вы можете видеть ниже, я изменяю размер шрифта с 10 до 12, если имя поля равно «Field1»).
Как мне выделить поле? Любая документация о том, в каком порядке / Helv 10 Tf 0 г расположены? Что мне нужно установить, чтобы выделить поле?Если я правильно понимаю, есть 14 основных шрифтов, которые я могу использовать в PDFBox из коробки (каламбур непреднамеренный). Я хотел бы использовать один или несколько шрифтов, которые выглядят как подписи (курсив). Какие-нибудь из готовых шрифтов, которые это делают? Если нет, если у меня есть собственный шрифт, как мне установить метод записи в PDF?Обратите внимание, что приведенный ниже код работает нормально, заполняя определенное «значение», переданное в параметре метода, в специальное поле «имя» параметра метода.
Спасибо !
public static void setField(String name, String value ) throws IOException {
PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField( name );
COSDictionary dict = ((PDField)field).getDictionary();
COSString defaultAppearance = (COSString) dict.getDictionaryObject(COSName.DA);
if (defaultAppearance != null)
{
dict.setString(COSName.DA, "/Helv 10 Tf 0 g");
if(name.equalsIgnoreCase("Field1"))
{
dict.setString(COSName.DA, "/Helv 12 Tf 0 g");
}
}
if(field instanceof PDTextbox)
{
field= new PDTextbox(acroForm, dict);
((PDField)field).setValue(value);
}
Согласно ответу mkl, чтобы использовать два шрифта в одном и том же PDF, я использовал следующий метод: я не мог заставить шрифт по умолчанию и собственный шрифт работать вместе, поэтому я добавил два шрифта к ресурсам и использовал их.
public List<String> prepareFont(PDDocument _pdfDocument) throws IOException
{
PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDResources res = acroForm.getDefaultResources();
if (res == null)
res = new PDResources();
InputStream fontStream = getClass().getResourceAsStream("LiberationSans-Regular.ttf");
InputStream fontStream2 = getClass().getResourceAsStream("Font2.ttf");
PDTrueTypeFont font = PDTrueTypeFont.loadTTF(_pdfDocument, fontStream);
PDTrueTypeFont font2 = PDTrueTypeFont.loadTTF(_pdfDocument, fontStream2);
String fontName = res.addFont(font);
String fontName2 = res.addFont(font2);
acroForm.setDefaultResources(res);
List<String> fontList = new ArrayList<String>(); fontList.add(font1);fontList.add(font2);
return fontList;
}