Java'da yazı tipini kullanarak metin oluşturma

Önceki makalede, CFF, TrueType ve Type1 yazı tiplerinin Java kullanılarak programlı olarak nasıl yükleneceğini gördünüz. Bugün, Java yazı tipi işleme API’mizin başka bir ilginç özelliğini tartışacağız - yazı tiplerini kullanarak metin oluşturma. Bu makalenin sonunda, Java uygulamalarınızdan TrueType ve Type1 yazı tiplerini kullanarak metin oluşturabileceksiniz. Haydi başlayalım.

Java Yazı Tipi Düzenleme API’sı

Aspose.Font for Java size yazı tiplerini yükleme ve kaydetme özelliklerinin yanı sıra CFF, TrueType, OpenType ve Type1 gibi popüler yazı tipi türlerinin metriklerini alma özellikleri sunar. Ayrıca API, sağlanan TrueType veya Type1 yazı tiplerini kullanarak metni oluşturmanıza olanak tanır. API’yi Maven yapılandırmalarını kullanarak yükleyebilir veya API’nin JAR’ını indirebilirsiniz.

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

Metin Oluşturma Yöntemini Uygulayın

Metni oluşturmak için Aspose.Font for Java, sağlanan metni çizecek olan drawText() yöntemini uygulamanızı gerektirir. DrawText() yönteminin tam tanımı aşağıdadır.

// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-Java adresine gidin.
static void drawText(String text, IFont font, double fontSize,
           Paint backgroundBrush, Paint textBrush, String outFile) throws Exception
{
    //Metin satırındaki her sembol için glif tanımlayıcıları alın
    GlyphId[] gids = new GlyphId[text.length()];
   for (int i = 0; i < text.length(); i++)
        gids[i] = font.getEncoding().decodeToGid(text.charAt(i));
    // ortak çizim ayarlarını yap
    double dpi = 300;
	
    double resolutionCorrection = dpi / 72; // 72 is font's internal dpi
    // çıktı bit eşlemi hazırla
    BufferedImage outBitmap = new BufferedImage(960, 720, BufferedImage.TYPE_INT_BGR);
    //outBitmap.getRaster().SetResolution((float)dpi, (float)dpi);
    java.awt.Graphics2D outGraphics = (java.awt.Graphics2D) outBitmap.getGraphics();
    outGraphics.setPaint(backgroundBrush);
    outGraphics.fillRect(0, 0, outBitmap.getWidth(), outBitmap.getHeight());
    outGraphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    //koordinat değişkenlerini ve önceki gid'i bildir
    GlyphId previousGid = null;
    double glyphXCoordinate = 0;
    double glyphYCoordinate = fontSize * resolutionCorrection;
    //gids'deki her glifi boyayan döngü
   for (GlyphId gid : gids)
    {
        // yazı tipi g'yi içeriyorsa
        if (gid != null)
        {
            Glyph glyph = font.getGlyphAccessor().getGlyphById(gid);
            if (glyph == null)
                continue;
	
            // çizim talimatlarını kabul eden yol
            GeneralPath path = new GeneralPath();
	
            // IGlyphOutlinePainter uygulaması oluşturma
            GlyphOutlinePainter outlinePainter = new GlyphOutlinePainter(path);
	
            // İşleyiciyi oluştur
            IGlyphRenderer renderer = new GlyphOutlineRenderer(outlinePainter);
	
            // ortak glif özelliklerini al
            double kerning = 0;
	
            // karakter aralığı değerini al
            if (previousGid != null)
            {
                kerning = (font.getMetrics().getKerningValue(previousGid, gid) /
                           glyph.getSourceResolution()) * fontSize * resolutionCorrection;
                kerning += fontWidthToImageWdith(font.getMetrics().getGlyphWidth(previousGid),
                        glyph.getSourceResolution(), fontSize, 300);
            }
	
            // glif konumlandırma - karakter aralığı mesafesine göre glif X koordinatını artırın
            glyphXCoordinate += kerning;
	
            // Glif yerleştirme matrisi
            TransformationMatrix glyphMatrix =
                new TransformationMatrix(
                    new double[]
                            {
                                    fontSize*resolutionCorrection,
                                    0,
                                    0,
                                // bitmap koordinat sistemi üstten başladığı için negatif
                                    - fontSize*resolutionCorrection,
                                    glyphXCoordinate,
                                    glyphYCoordinate
                            });
	
            // geçerli glifi oluştur
            renderer.renderGlyph(font, gid, glyphMatrix);
            // yolu doldur
            path.setWindingRule(GeneralPath.WIND_NON_ZERO);
            outGraphics.setPaint(textBrush);
            outGraphics.fill(path);
        }
        //sonraki glif için doğru karakter aralığını elde etmek için mevcut gid'i önceki olarak ayarlayın
        previousGid = gid;
    }
    //Sonuçları kaydet
    ImageIO.write(outBitmap, "jpg", new File(outFile));
}

Aşağıda, bitmap koordinat sistemi için glif genişliğini hesaplamak için kullanılan bir yardımcı program yöntemi yer almaktadır.

// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-Java adresine gidin.
static double fontWidthToImageWidth(double width, int fontSourceResulution, double fontSize, double dpi)
{
    double resolutionCorrection = dpi / 72; // 72 is font's internal dpi
    return (width / fontSourceResulution) * fontSize * resolutionCorrection;
}

Metni Java’da Yazı Tipiyle Oluşturma Adımları

Aşağıda, yukarıda belirtilen darwText() yöntemi kullanılarak belirtilen bir metnin bir görüntü dosyası olarak nasıl oluşturulacağı adımları yer almaktadır.

  • FontDefinition sınıfını kullanarak yazı tipini yükleyin.
  • Type1Font veya TtfFont gibi sınıfı kullanarak yazı tipine erişin.
  • Ayrıntıları parametreleri biçiminde sağlayarak drawText() yöntemini çağırın.

Java kullanarak TrueType Yazı Tipi ile Metni Oluşturun

Aşağıdaki kod örneği, bir TrueType yazı tipi kullanarak metni işlemek için drawText() yönteminin nasıl kullanılacağını gösterir. Oluşturma sonuçları bir JPEG görüntüsü olarak oluşturulacaktır.

// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-Java adresine gidin.
String fileName1 = Utils.getDataDir() + "Montserrat-Bold.ttf"; //Font file name with full path
      FontDefinition fd1 = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName1)));
      TtfFont font1 = (TtfFont) Font.open(fd1);
      
      String fileName2 = Utils.getDataDir() + "Lora-Bold.ttf"; //Font file name with full path
      FontDefinition fd2 = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName2)));
      TtfFont font2 = (TtfFont) Font.open(fd2);
      
      try {
       drawText("Hello world", font1, 14, java.awt.Color.WHITE, java.awt.Color.BLACK, Utils.getDataDir() + "hello1_montserrat_out.jpg");
       drawText("Hello world", font2, 14, java.awt.Color.YELLOW, java.awt.Color.RED, Utils.getDataDir() + "hello2_lora_out.jpg");
      } catch (Exception ex) {
      	ex.printStackTrace();
      }

Java’da Type1 Yazı Tiplerini Kullanarak Metni Oluşturun

Aşağıdaki kod örneği, Java kullanarak bir Type1 yazı tipiyle bir JPEG görüntüsüne metin oluşturmayı gösterir.

// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-font/Aspose.Font-for-Java adresine gidin.
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);
      
      try {
       drawText("Hello world", font, 14, java.awt.Color.WHITE, java.awt.Color.BLACK, Utils.getDataDir() + "hello1_type1_out.jpg");
       drawText("Hello world", font, 14, java.awt.Color.YELLOW, java.awt.Color.RED, Utils.getDataDir() + "hello2_type1_out.jpg");
      } catch (Exception ex) {
      	ex.printStackTrace();
      }

Çözüm

Bu makalede, Java uygulamalarının içinden TrueType veya Type1 yazı tipini kullanarak metni JPEG görüntüler olarak nasıl işleyeceğinizi gördünüz. Java yazı tipi işleme API’si hakkında daha fazla bilgi edinmek için belgeleri ziyaret edebilir ve kaynak kodu örneklerini kullanarak API’nin özelliklerini değerlendirebilirsiniz.