работа со шрифтами в java

Шрифты играют важную роль в представлении текста в документах и веб-страницах. Доступны различные семейства шрифтов, которые позволяют использовать причудливые символы, чтобы сделать ваш текст привлекательным. Поскольку Aspose занимается автоматизацией форматов файлов, мы запустили специальный API для работы со шрифтами для работы с форматами файлов шрифтов. В этой статье вы познакомитесь с нашим Java Font API и узнаете, как работать со шрифтами CFF, TrueType, OpenType и Type1 из ваших приложений Java.

API управления шрифтами Java

Aspose.Font for Java — это API для управления шрифтами, который позволяет загружать, сохранять и управлять популярными шрифтами, включая CFF, TrueType, Type1, EOT и OpenType. Кроме того, API поддерживает получение метрик шрифта, а также визуализацию текста с использованием поддерживаемых типов шрифтов. Вы можете загрузить API или установить его в своих приложениях на основе Maven, используя следующие конфигурации.

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-font</artifactId>
    <version>20.10</version>
</dependency>

Загрузка шрифтов CFF, TrueType и Type1 с помощью Java

Вы можете легко загрузить шрифт из файла, расположенного в вашем хранилище, из вашей программы Java. После того, как вы загрузили шрифт, вы можете выполнять дальнейшие операции по мере необходимости. Ниже приведены шаги для загрузки шрифта с помощью Aspose.Font для Java.

  • Используйте класс FontDefinition для загрузки шрифта, указав его тип, например TrueType, Type1 и т. д.
  • Используйте класс CffFont, TtfFont или Type1Font для доступа к шрифтам CFF, TrueType и Type1 соответственно из объекта FontDefinition.

Загрузите шрифты CFF с помощью Java

Вот как вы можете загрузить шрифт CFF из файла с помощью Java.

// Полные примеры и файлы данных см. на странице https://github.com/aspose-font/Aspose.Font-for-Java.
String fileName = Utils.getDataDir() + "OpenSans-Regular.cff"; //Font file name with full path

      FontDefinition fd = new FontDefinition(FontType.CFF, new FontFileDefinition("cff", new FileSystemStreamSource(fileName)));
      CffFont ttfFont = (CffFont) Font.open(fd);
      
      System.out.println("Font has been loaded");

Загрузите шрифты TrueType с помощью Java

Следующий пример кода Java загружает шрифт TrueType.

// Полные примеры и файлы данных см. на странице https://github.com/aspose-font/Aspose.Font-for-Java.
String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path

      FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
      TtfFont font = (TtfFont) Font.open(fd);        

Загрузите шрифты Type1 с помощью Java

В следующем примере кода показано, как загрузить шрифт Type1 с помощью Java.

// Полные примеры и файлы данных см. на странице https://github.com/aspose-font/Aspose.Font-for-Java.
String fileName = Utils.getDataDir() + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
      Type1Font font = (Type1Font) Font.open(fd);

Извлечение метрик шрифта из шрифтов TrueType или Type1 с использованием Java

Файлы шрифтов также содержат информацию о шрифте, которая используется для указания межстрочного интервала, размещения нижнего и верхнего индексов, выравнивания и т. д. Aspose.Font для Java также позволяет извлекать информацию о метриках шрифта, включая Ascender, Descender, TypoAscender, TypoDescender. и UnitsPerEm. Ниже приведены шаги для выполнения этой операции.

  • Используйте класс FontDefinition для загрузки шрифта TrueType или Type1.
  • Получите доступ к шрифту с помощью класса TtfFont или Type1Font в зависимости от типа шрифта.
  • Извлеките информацию о метриках шрифта.

Получить метрики шрифта из шрифта TrueType с помощью Java

// Полные примеры и файлы данных см. на странице https://github.com/aspose-font/Aspose.Font-for-Java.
String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path

      FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
      TtfFont font = (TtfFont) Font.open(fd);

      String name = font.getFontName();
      System.out.println("Font name: " + name);
      System.out.println("Glyph count: " + font.getNumGlyphs());
      String metrics = MessageFormat.format(
          "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
          font.getMetrics().getAscender(), font.getMetrics().getDescender(),
          font.getMetrics().getTypoAscender(), font.getMetrics().getTypoDescender(), font.getMetrics().getUnitsPerEM());

      System.out.println(metrics);
      
    //Получите таблицу кодировки Unicode cmap из шрифта как объект TtfCMapFormatBaseTable, чтобы получить доступ к информации о глифе шрифта для символа «A».
      //Также убедитесь, что у шрифта есть объект TtfGlyfTable (таблица 'glyf') для доступа к глифу.
      TtfCMapFormatBaseTable cmapTable = null;
      if (font.getTtfTables().getCMapTable() != null)
      {
          cmapTable = font.getTtfTables().getCMapTable().findUnicodeTable();
      }
      if (cmapTable != null && font.getTtfTables().getGlyfTable() != null)
      {
      	System.out.println("Font cmap unicode table: PlatformID = " + cmapTable.getPlatformId() +
      			", PlatformSpecificID = " + cmapTable.getPlatformSpecificId());

          //Код для символа «А»
          char unicode = (char)65;

          //Индекс глифа для «А»
          long glIndex = cmapTable.getGlyphIndex(unicode);

          if (glIndex != 0)
          {
              //Глиф для «А»
              Glyph glyph = font.getGlyphById(glIndex);
              if (glyph != null)
              {
                  //Печать метрик глифа
              	System.out.println("Glyph metrics for 'A' symbol:");
                  String bbox = MessageFormat.format(
                      "Glyph BBox: Xmin = {0}, Xmax = {1}" + ", Ymin = {2}, Ymax = {3}",
                      glyph.getGlyphBBox().getXMin(), glyph.getGlyphBBox().getXMax(),
                      glyph.getGlyphBBox().getYMin(), glyph.getGlyphBBox().getYMax());
                  System.out.println(bbox);
                  System.out.println("Width:" + font.getMetrics().getGlyphWidth(new GlyphUInt32Id(glIndex)));
              }
          }
      }

Извлечение метрик шрифта из шрифта Type1 с использованием Java

// Полные примеры и файлы данных см. на странице https://github.com/aspose-font/Aspose.Font-for-Java.
String fileName = Utils.getDataDir() + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
      Type1Font font = (Type1Font) Font.open(fd);

      String name = font.getFontName();
      System.out.println("Font name: " + name);
      System.out.println("Glyph count: " + font.getNumGlyphs());
      String metrics = MessageFormat.format(
          "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
          font.getMetrics().getAscender(), font.getMetrics().getDescender(),
          font.getMetrics().getTypoAscender(), font.getMetrics().getTypoDescender(), font.getMetrics().getUnitsPerEM());

      System.out.println(metrics);

Вывод

В этой статье вы узнали, как программно работать со шрифтами CFF, TrueType и Type1 с помощью Java. Кроме того, вы видели, как получить доступ к информации о метриках определенного шрифта. Вы можете узнать больше об API управления шрифтами Java, используя документацию и примеры исходного кода.