Javaでフォントを操作する

フォントは、ドキュメントやWebページ内のテキストの表示に重要な役割を果たします。テキストを魅力的にするために派手な文字を使用できるようにするさまざまなフォントファミリが利用可能です。 Asposeはファイル形式の自動化を扱っているため、フォントファイル形式を処理するための専用のフォント操作APIをリリースしました。この記事では、Java Font APIに精通し、Javaアプリケーション内からCFF、TrueType、OpenType、およびType1フォントを操作する方法を学習します。

Javaフォント操作API

Aspose.Font for Javaは、CFFTrueTypeType1 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>

Javaを使用してCFF、TrueType、およびType1フォントをロードする

Javaプログラム内から、ストレージにあるファイルからフォントを簡単にロードできます。フォントをロードしたら、必要に応じてさらに操作を実行できます。以下は、Aspose.FontforJavaを使用してフォントをロードする手順です。

  • FontDefinitionクラスを使用して、TrueType、Type1などのタイプを指定してフォントをロードします。
  • CffFontTtfFont、またはType1Fontクラスを使用して、FontDefinitionオブジェクトからそれぞれCFF、TrueType、およびType1フォントにアクセスします。

Javaを使用してCFFフォントをロードする

これは、Javaを使用してファイルからCFFフォントをロードする方法です。

// 完全な例とデータファイルについては、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");

Javaを使用してTrueTypeフォントをロードする

次の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);        

Javaを使用してType1フォントをロードする

次のコードサンプルは、Javaを使用してType1フォントをロードする方法を示しています。

// 完全な例とデータファイルについては、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);

Javaを使用してTrueTypeまたはType1フォントからフォントメトリックを抽出する

フォントファイルには、行間隔、下付き文字と上付き文字の配置、配置などを指定するために使用されるフォント情報も含まれています。Aspose.Fontfor Javaでは、Ascender、Descender、TypoAscender、TypoDescenderなどのフォントメトリック情報を抽出することもできます。 、およびUnitsPerEm。この操作を実行する手順は次のとおりです。

  • FontDefinitionクラスを使用して、TrueTypeまたはType1フォントをロードします。
  • フォントの種類に応じて、TtfFontまたはType1Fontクラスを使用してフォントにアクセスします。
  • フォントのメトリック情報を抽出します。

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);

      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);
      
    //シンボル「A」のフォントグリフに関する情報にアクセスするには、オブジェクトTtfCMapFormatBaseTableとしてフォントからcmapユニコードエンコーディングテーブルを取得します。
      //また、フォントにグリフにアクセスするためのオブジェクト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());

          //「A」記号のコード
          char unicode = (char)65;

          //'A'のグリフインデックス
          long glIndex = cmapTable.getGlyphIndex(unicode);

          if (glIndex != 0)
          {
              //'A'のグリフ
              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)));
              }
          }
      }

Javaを使用してType1フォントからフォントメトリックを抽出する

// 完全な例とデータファイルについては、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);

結論

この記事では、Javaを使用してプログラムでCFF、TrueType、およびType1フォントを操作する方法を学習しました。さらに、特定のフォントのフォントメトリック情報にアクセスする方法を見てきました。 ドキュメントおよびソースコードサンプルを使用して、Javaフォント操作APIの詳細を調べることができます。