Стратегия шрифтов iText

#java #fonts #itext

#java #шрифты #itext

Вопрос:

У меня есть веб-приложение, которое будет генерировать PDF-файл из данных и разрешать пользователю загружать. У нас есть пользовательский шрифт, поэтому я регистрирую четыре файла шрифтов (обычные, полужирные, курсивные и полужирные курсивные ttf-файлы).

  1. Это необходимо? Могу ли я просто использовать обычный файл шрифта и установить вес / стили через класс шрифтов или мне нужны все файлы? Похоже, что все работает нормально, но я все еще учусь.

  2. Какая хорошая стратегия или шаблон для управления этими разными шрифтами для добавления в мои документы? Кто-нибудь много сделал с этим с точки зрения Java?

Ответ №1:

Вы не говорите нам, как вы регистрируете свои шрифты и как вы их используете, поэтому позвольте мне рассказать вам, как я буду работать (я оригинальный разработчик iText). Если вы используете эти 4 шрифта, лучший способ — зарегистрировать их следующим образом:

 BaseFont bfRegular = BaseFont.createFont(regularTTF, BaseFont.IDENTITY_H, BaseFont_EMBEDDED);
BaseFont bfBold = BaseFont.createFont(boldTTF, BaseFont.IDENTITY_H, BaseFont_EMBEDDED);
BaseFont bfItalic = BaseFont.createFont(italicTTF, BaseFont.IDENTITY_H, BaseFont_EMBEDDED);
BaseFont bfBoldItalic = BaseFont.createFont(boldItalicTTF, BaseFont.IDENTITY_H, BaseFont_EMBEDDED);
  

Я бы использовал эти BaseFont экземпляры всякий раз, когда добавлял контент с использованием низкоуровневых операций.

Тогда я бы сделал:

 Font fRegular = new Font(bfRegular, 12);
Font fBold = new Font(bfBold, 12);
Font fItalic = new Font(bfItalic, 12);
Font fBoldItalic = new Font(bfBoldItalic, 12);
  

Я бы использовал эти шрифты всякий раз, когда мне нужно создать объект высокого уровня, такой как Paragraph .

Конечно, мне также может понадобиться что-то вроде этого:

 Font fRegularSmall = new Font(bfRegular, 9);
Font fBoldSmall = new Font(bfBold, 9);
Font fItalicSmall = new Font(bfItalic, 9);
Font fBoldItalicSmall = new Font(bfBoldItalic, 9);
Font fRegularBig = new Font(bfRegular, 20);
Font fBoldBig = new Font(bfBold, 20);
Font fItalicBig = new Font(bfItalic, 20);
Font fBoldItalicBig = new Font(bfBoldItalic, 20);
  

Обычно я создаю вспомогательный класс, в котором я создаю BaseFont объекты только один раз (их нужно использовать повторно), и я создаю геттеры для Font объектов.