thao tác phông chữ trong java

Phông chữ đóng một vai trò quan trọng trong việc trình bày văn bản trong các tài liệu và trang web. Có sẵn nhiều họ phông chữ khác nhau cho phép bạn sử dụng các ký tự ưa thích để làm cho văn bản của bạn hấp dẫn. Vì Aspose giải quyết vấn đề tự động hóa định dạng tệp nên chúng tôi đã khởi chạy API thao tác phông chữ chuyên dụng để hoạt động với các định dạng tệp phông chữ. Trong bài viết này, bạn sẽ làm quen với API Phông chữ Java của chúng tôi và tìm hiểu cách làm việc với các phông chữ CFF, TrueType, OpenType và Type1 từ bên trong các ứng dụng Java của bạn.

API thao tác phông chữ Java

Aspose.Font for Java là API thao tác phông chữ cho phép bạn tải, lưu và thao tác các phông chữ phổ biến bao gồm CFF, TrueType, Type1, EOTOpenType. Ngoài ra, API hỗ trợ truy xuất số liệu về phông chữ cũng như hiển thị văn bản bằng các loại phông chữ được hỗ trợ. Bạn có thể tải xuống API hoặc cài đặt nó trong các ứng dụng dựa trên Maven của mình bằng cách sử dụng các cấu hình sau.

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

Tải Phông chữ CFF, TrueType và Type1 bằng Java

Bạn có thể dễ dàng tải phông chữ từ một tệp nằm trên bộ lưu trữ của mình từ bên trong chương trình Java của bạn. Khi bạn đã tải phông chữ, bạn có thể thực hiện các thao tác tiếp theo theo yêu cầu. Sau đây là các bước để tải phông chữ bằng Aspose.Font cho Java.

  • Sử dụng lớp FontDefinition để tải phông chữ bằng cách chỉ định loại phông chữ, chẳng hạn như TrueType, Type1, v.v.
  • Sử dụng lớp CffFont, TtfFont hoặc Type1Font để truy cập các phông chữ CFF, TrueType và Type1 tương ứng từ đối tượng FontDefinition.

Tải phông chữ CFF bằng Java

Đây là cách bạn có thể tải phông chữ CFF từ tệp bằng Java.

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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");

Tải Phông chữ TrueType bằng Java

Mẫu mã Java sau tải phông chữ TrueType.

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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);        

Tải phông chữ Type1 bằng Java

Mẫu mã sau đây cho biết cách tải phông chữ Type1 bằng Java.

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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);

Trích xuất số liệu phông chữ từ phông chữ TrueType hoặc Type1 bằng Java

Các tệp phông chữ cũng chứa thông tin của phông chữ được sử dụng để chỉ định khoảng cách dòng, vị trí của chỉ số dưới và chỉ số trên, căn chỉnh, v.v. Aspose.Font for Java cũng cho phép bạn trích xuất thông tin số liệu phông chữ bao gồm Ascender, Descender, TypoAscender, TypoDescender và UnitsPerEm. Sau đây là các bước để thực hiện thao tác này.

  • Sử dụng lớp FontDefinition để tải phông chữ TrueType hoặc Type1.
  • Truy cập phông chữ bằng lớp TtfFont hoặc Type1Font tùy theo loại phông chữ.
  • Trích xuất thông tin số liệu của phông chữ.

Nhận số liệu phông chữ từ phông chữ TrueType bằng Java

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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);
      
    //Nhận bảng mã hóa cmap unicode từ phông chữ dưới dạng đối tượng TtfCMapFormatBaseTable để truy cập thông tin về glyph phông chữ cho ký hiệu 'A'.
      //Ngoài ra, hãy kiểm tra xem phông chữ có đối tượng TtfGlyfTable (bảng 'glyf') để truy cập glyph hay không.
      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());

          //Mã cho ký hiệu 'A'
          char unicode = (char)65;

          //Chỉ số Glyph cho 'A'
          long glIndex = cmapTable.getGlyphIndex(unicode);

          if (glIndex != 0)
          {
              //Glyph cho 'A'
              Glyph glyph = font.getGlyphById(glIndex);
              if (glyph != null)
              {
                  //In số liệu glyph
              	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)));
              }
          }
      }

Trích xuất số liệu phông chữ từ phông chữ Type1 bằng Java

// Để biết các ví dụ và tệp dữ liệu đầy đủ, vui lòng truy cập 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);

Sự kết luận

Trong bài viết này, bạn đã học cách làm việc với các phông chữ CFF, TrueType và Type1 theo lập trình bằng cách sử dụng Java. Ngoài ra, bạn đã thấy cách truy cập thông tin số liệu phông chữ của một phông chữ cụ thể. Bạn có thể khám phá thêm về API thao tác phông chữ Java bằng cách sử dụng tài liệumẫu mã nguồn.