دستکاری فونت ها در جاوا

[فونت1 نقش مهمی در ارائه متن در اسناد و صفحات وب دارند. خانواده فونت های مختلفی در دسترس هستند که به شما امکان می دهند از کاراکترهای فانتزی استفاده کنید تا متن خود را جذاب کنید. از آنجایی که Aspose با اتوماسیون فرمت فایل سروکار دارد، یک API دستکاری فونت اختصاصی برای کار با فرمت های فایل فونت راه اندازی کرده ایم. در این مقاله، با Java Font API ما آشنا می شوید و نحوه کار با فونت های CFF، TrueType، OpenType و Type1 را از داخل برنامه های جاوای خود یاد می گیرید.

Java Font Manipulation API

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 را با استفاده از جاوا بارگیری کنید

شما به راحتی می توانید فونت را از فایلی که در حافظه خود قرار دارد از داخل برنامه جاوا بارگیری کنید. هنگامی که فونت را بارگیری کردید، می توانید عملیات های بیشتری را در صورت نیاز انجام دهید. در زیر مراحل بارگذاری یک فونت با استفاده از Aspose.Font برای جاوا آمده است.

  • از کلاس FontDefinition برای بارگذاری فونت با تعیین نوع آن مانند TrueType، Type1 و غیره استفاده کنید.
  • از کلاس CffFont، TtfFont یا Type1Font برای دسترسی به فونت‌های CFF، TrueType و Type1 به ترتیب از شی FontDefinition استفاده کنید.

فونت های CFF را با استفاده از جاوا بارگیری کنید

به این ترتیب می توانید یک فونت 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");

فونت های TrueType را با استفاده از جاوا بارگیری کنید

نمونه کد جاوا زیر یک فونت 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 را با استفاده از جاوا بارگیری کنید

نمونه کد زیر نحوه بارگذاری فونت 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);

با استفاده از جاوا، متریک فونت را از فونت های TrueType یا Type1 استخراج کنید

فایل های فونت همچنین حاوی اطلاعات فونت هستند که برای تعیین فاصله خطوط، قرار دادن زیرنویس و بالانویس، تراز و غیره استفاده می شود. Aspose.Font برای جاوا همچنین به شما امکان می دهد اطلاعات متریک فونت از جمله Ascender، Descender، TypoAscender، TypoDescender را استخراج کنید. ، و UnitsPerEm. مراحل زیر برای انجام این عملیات آورده شده است.

  • از کلاس FontDefinition برای بارگیری فونت TrueType یا Type1 استفاده کنید.
  • با استفاده از کلاس TtfFont یا Type1Font با توجه به نوع فونت به فونت دسترسی پیدا کنید.
  • اطلاعات متریک فونت را استخراج کنید.

با استفاده از جاوا، متریک فونت را از فونت 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);
      
    //جدول رمزگذاری یونیکد 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());

          //کد برای نماد "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)));
              }
          }
      }

با استفاده از جاوا، متریک فونت را از فونت 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);

نتیجه

در این مقاله نحوه کار با فونت های CFF، TrueType و Type1 را به صورت برنامه نویسی با استفاده از جاوا یاد گرفتید. علاوه بر این، نحوه دسترسی به اطلاعات متریک فونت یک فونت خاص را دیده اید. می‌توانید با استفاده از مستندات و نمونه‌های کد منبع درباره API دستکاری فونت جاوا بیشتر کاوش کنید.