manipulovat s fonty v Javě

Fonty hrají důležitou roli při prezentaci textu v dokumentech a na webových stránkách. K dispozici jsou různé rodiny písem, které vám umožňují používat ozdobné znaky, aby byl váš text přitažlivý. Protože se Aspose zabývá automatizací formátů souborů, spustili jsme vyhrazené API pro manipulaci s písmy pro práci s formáty souborů písem. V tomto článku se seznámíte s naším Java Font API a naučíte se pracovat s fonty CFF, TrueType, OpenType a Type1 z vašich aplikací Java.

Java API pro manipulaci s písmy

Aspose.Font for Java je rozhraní API pro manipulaci s písmy, které umožňuje načítat, ukládat a manipulovat s oblíbenými písmy včetně CFF, TrueType, Type1, EOT a OpenType. Kromě toho rozhraní API podporuje načítání metrik písem a také vykreslování textu pomocí podporovaných typů písem. Rozhraní API si můžete stáhnout nebo jej nainstalovat do aplikací založených na Maven pomocí následujících konfigurací.

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

Načtěte písma CFF, TrueType a Type1 pomocí Java

Písmo můžete snadno načíst ze souboru umístěného ve vašem úložišti z vašeho programu Java. Po načtení písma můžete provádět další operace podle potřeby. Následují kroky k načtení písma pomocí Aspose.Font for Java.

  • Pomocí třídy FontDefinition načtěte písmo zadáním jeho typu, jako je TrueType, Type1 atd.
  • Pro přístup k písmům CFF, TrueType a Type1 z objektu FontDefinition použijte třídu CffFont, TtfFont nebo Type1Font.

Načtěte písma CFF pomocí Java

Takto můžete načíst písmo CFF ze souboru pomocí Java.

// Úplné příklady a datové soubory najdete na 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");

Načtěte písma TrueType pomocí Java

Následující ukázka kódu Java načte písmo TrueType.

// Úplné příklady a datové soubory najdete na 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);        

Načtěte písma Type1 pomocí Java

Následující ukázka kódu ukazuje, jak načíst písmo Type1 pomocí Java.

// Úplné příklady a datové soubory najdete na 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);

Extrahujte metriky písem z písem TrueType nebo Type1 pomocí Java

Soubory písem také obsahují informace o písmu, které se používají ke specifikaci řádkování, umístění dolního a horního indexu, zarovnání atd. Aspose.Font for Java vám také umožňuje extrahovat metrické informace písem včetně Ascender, Descender, TypoAscender, TypoDescender a UnitsPerEm. Následují kroky k provedení této operace.

  • Použijte třídu FontDefinition k načtení písem TrueType nebo Type1.
  • K písmu přistupujte pomocí třídy TtfFont nebo Type1Font podle typu písma.
  • Extrahujte informace o metrikách písma.

Získejte metriky písem z písma TrueType pomocí Java

// Úplné příklady a datové soubory najdete na 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);
      
    //Získejte tabulku kódování Cmap unicode z písma jako objekt TtfCMapFormatBaseTable pro přístup k informacím o glyfu písma pro symbol 'A'.
      //Také zkontrolujte, zda má písmo objekt TtfGlyfTable (tabulka 'glyf') pro přístup ke glyfu.
      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());

          //Kód pro symbol 'A'
          char unicode = (char)65;

          //Index glyfů pro „A“
          long glIndex = cmapTable.getGlyphIndex(unicode);

          if (glIndex != 0)
          {
              //Glyf pro „A“
              Glyph glyph = font.getGlyphById(glIndex);
              if (glyph != null)
              {
                  //Vytisknout metriky glyfů
              	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)));
              }
          }
      }

Extrahujte metriky písem z písma Type1 pomocí Java

// Úplné příklady a datové soubory najdete na 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);

Závěr

V tomto článku jste se naučili pracovat s fonty CFF, TrueType a Type1 programově pomocí Java. Dále jste viděli, jak získat přístup k informacím o metrikách konkrétního písma. Další informace o rozhraní API pro manipulaci s písmy Java můžete prozkoumat pomocí dokumentace a ukázky zdrojového kódu.