manipulera typsnitt i java

Teckensnitt spelar en viktig roll i presentationen av texten i dokumenten och webbsidorna. Det finns olika teckensnittsfamiljer som låter dig använda snygga tecken för att göra din text tilltalande. Eftersom Aspose sysslar med automatisering av filformat har vi lanserat ett dedikerat fontmanipulerings-API för att arbeta med font-filformat. I den här artikeln kommer du att bekanta dig med vårt Java Font API och lära dig hur du arbetar med CFF-, TrueType-, OpenType- och Type1-teckensnitt från dina Java-applikationer.

Java Font Manipulation API

Aspose.Font for Java är fontmanipulation API som låter dig ladda, spara och manipulera populära typsnitt inklusive CFF, TrueType, Type1, EOT och OpenType. Dessutom stöder API:et hämtning av teckensnittsstatistik samt rendering av texten med de teckensnittstyper som stöds. Du kan ladda ner API:et eller installera det i dina Maven-baserade applikationer med följande konfigurationer.

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

Ladda CFF-, TrueType- och Type1-teckensnitt med Java

Du kan enkelt ladda typsnittet från en fil som finns på din lagring från ditt Java-program. När du har laddat teckensnittet kan du utföra ytterligare åtgärder efter behov. Följande är stegen för att ladda ett teckensnitt med Aspose.Font för Java.

  • Använd klassen FontDefinition för att ladda teckensnittet genom att ange dess typ som TrueType, Type1, etc.
  • Använd klassen CffFont, TtfFont eller Type1Font för att komma åt CFF-, TrueType- respektive Type1-teckensnitten från FontDefinition-objektet.

Ladda CFF-teckensnitt med Java

Så här kan du ladda ett CFF-teckensnitt från en fil med Java.

// För fullständiga exempel och datafiler, gå till 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");

Ladda TrueType-teckensnitt med Java

Följande Java-kodexempel laddar ett TrueType-teckensnitt.

// För fullständiga exempel och datafiler, gå till 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);        

Ladda Type1-teckensnitt med Java

Följande kodexempel visar hur man laddar ett Type1-teckensnitt med Java.

// För fullständiga exempel och datafiler, gå till 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);

Extrahera teckensnittsmått från TrueType- eller Type1-teckensnitt med Java

Teckensnittsfilerna innehåller också teckensnittets information som används för att specificera radavstånd, placering av nedsänkt och upphöjd, justering, och etc. Aspose.Font för Java låter dig också extrahera teckensnittsmetrisk information inklusive Ascender, Descender, TypoAscender, TypoDescender , och UnitsPerEm. Följande är stegen för att utföra denna operation.

  • Använd klassen FontDefinition för att ladda TrueType- eller Type1-teckensnitt.
  • Få åtkomst till teckensnittet med klassen TtfFont eller Type1Font beroende på typsnittets typ.
  • Extrahera teckensnittets statistikinformation.

Få Font Metrics från TrueType Font med Java

// För fullständiga exempel och datafiler, gå till 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);
      
    //Hämta cmap unicode-kodningstabell från teckensnitt som objekt TtfCMapFormatBaseTable för att få tillgång till information om teckensnittsglyph för symbol 'A'.
      //Kontrollera också att typsnittet har objektet TtfGlyfTable (tabell 'glyf') för att komma åt glyph.
      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());

          //Kod för 'A'-symbol
          char unicode = (char)65;

          //Glyfindex för 'A'
          long glIndex = cmapTable.getGlyphIndex(unicode);

          if (glIndex != 0)
          {
              //Glyf för 'A'
              Glyph glyph = font.getGlyphById(glIndex);
              if (glyph != null)
              {
                  //Skriv ut glyfstatistik
              	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)));
              }
          }
      }

Extrahera Font Metrics från Type1 Font med Java

// För fullständiga exempel och datafiler, gå till 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);

Slutsats

I den här artikeln har du lärt dig hur du arbetar med CFF-, TrueType- och Type1-teckensnitt programmatiskt med Java. Dessutom har du sett hur du får åtkomst till teckensnittsinformationen för ett specifikt teckensnitt. Du kan utforska mer om Java font manipulation API med dokumentation och källkodsexempel.