@iText_Q

Почему не применяется шрифт при создании PDF-документа?

Вопрос. Я создаю PDF-документы с помощью iText. Когда я пытаюсь включить шрифт «Agenda Tabular Light», iText игнорирует мой выбор. В этом можно убедиться на вкладке Файл > Свойства > Шрифты в Adobe Reader. PDF-файл показывает, что используется шрифт Helvetica, хотя этот шрифт выбран не был. Отображаются цвета, но не шрифт.
Мой код выглядит так:
public static final Font FONT_HEADER = FontFactory.getFont(AGENDA_TABULAR_LIGHT, 18, Font.NORMAL, TITLE_COLOR);

Также была проведена проверка в программе-примере.
// step 1
Document document = new Document();
// step 2
PdfWriter.getInstance(document, new FileOutputStream(filename));
// step 3
document.open();
// step 4: Font font = FontFactory.getFont("Agenda Tabular Light");
System.out.println(font.toString());
document.add(new Phrase("Agenda Tabular Light J j", font));
Font fontbold = FontFactory.getFont("Times-Roman", 12, Font.BOLD);
document.add(new Phrase("Times-Roman, Bold", fontbold));
document.add(Chunk.NEWLINE);
document.close();

Здесь отображается шрифт Times-Roman, но по факту используется другой шрифт. Каждый раз на вкладке свойств шрифта в Adobe Reader отображается Helvetica.
  • Вопрос задан
  • 398 просмотров
Пригласить эксперта
Ответы на вопрос 1
@iText_A
По умолчанию FontProgramFactory (FontFactory в iText 5) знает только шрифты типа 1, а шрифт "garamond bold" не входит в этот список, поэтому используется Helvetica (Helvetica — шрифт по умолчанию в iText).
Можно «научить» FontProgramFactory, как находить другие шрифты, зарегистрировав их. Можно попробовать следующее:
FontProgramFactory.registerSystemFontDirectories();

Но это очень затратная операция, так как здесь iText ищет в вашей операционной системе файлы шрифтов в разных каталогах (например, в C:/Windows/Fonts). Это может занять несколько секунд, и на выходе получится намного больше шрифтов, чем необходимо (возможно, что нужный шрифт так и не будет зарегистрирован).

Лучше регистрировать шрифты следующим образом.
FontProgramFactory.registerFont("c:/windows/fonts/garabd.ttf", "garamond bold");

Мы сообщаем iText, где найти файл .ttf ("c:/windows/fonts/garabd.ttf") и определяем псевдоним для нужного шрифта («garamond bold»). Теперь, когда название шрифта зарегистрировано, его можно использовать:
PdfFont myBoldFont = PdfFontFactory.createRegisteredFont("garamond bold");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы