3

Android 不Urdu Nastaliq正确支持字体(单词被打散并且单词的确切形状(Nastaliq)未制作)。

我为此使用了字体

TextView tx=(TextView)this.findViewById(R.id.tt);
tx.setTypeface(Typeface.createFromAsset(getAssets(),"TTF font Path"));

我能够使用 AWT 包在 java 中获得 Nasaliq 字体的确切格式,例如

Font font = Font.createFont(Font.TRUETYPE_FONT, new File("Path for ttf file"));
Font dynamicFont32Pt =   font.deriveFont (32f);
JLabel textLabel = new JLabel(textMessage);
textLabel.setFont(dynamicFont32Pt);

但是Android也不支持AWT Package Properly(java.awt.Font.createFont()deriveFont()),所以我们决定为Urdu的.ttf文件制作一个渲染引擎。

现在我的问题是——

  1. 我们可以在不需要渲染引擎的情况下在 Android 中(正确地)渲染 urdu 字体吗?如果没有,那么
  2. 如何在 Android 中读取 .ttf 文件(所有表格,如“glyp”、“head”)?
  3. 如何绘制一个TTF字体,即不需要PNG的矢量字体?
4

2 回答 2

2

从 ttf 文件中提取字形路径信息问题的答案可能会让您感兴趣:基本上,它指向 Batik 库,该库具有在 Java 中解析 TTF 文件的代码(将其转换为 SVG)。

于 2012-11-30T11:48:39.553 回答
0

您应该检查我的问题如何使用从 TTF 文件中提取的字距调整对正确地将字形显示为 Java 中的 Path2D?. 我推荐使用Apache FOP而不是 Batik 。它简单易用。优点是您只需阅读一次字体并将字形嵌入到您的应用程序中。然而,Apache FOP仅适用于 TTF,不适用于 OTF(也有可能,但我仍在努力)。Batik 使用 Java AWT 来呈现字符串。问题是您的应用程序每次运行时都需要读取字体文件。在我建议的方法中,您可以使用嵌入式迷你矢量化字体,或者您可以将嵌入式矢量化字符串用于小文本。这种方法的问题是宽度只能在绘画时间内正常工作。为了能够使用您使用 awt 从字体文件中恢复的字形,您需要直接从文件中读取字距调整对和宽度,以便能够正确显示文本。这在问题的答案中进行了解释。另请检查问题如何从 Android 中的 TTF 文件中读取字距调整对表?. 使用矢量化字形的优点是您的应用程序独立于字体文件和操作系统。

你可以看到我在 Windows 上使用这个系统,但你可以在 Android 上做同样的事情。字体在 Windows 上更容易处理,并且大多数字体都是 TTF。实际上,您可以在 Windows 上开发矢量化字体,然后在 Android 中使用生成的类。这就是这种方法的美妙之处。我使用生成我的字体println并将其复制并粘贴到一个新的类文件中。我什至懒得写文件。

于 2020-11-13T05:05:04.597 回答