Гліфи та метрики шрифтів TrueType | Java
Отримати показники шрифту
Показники шрифту стосуються такої інформації, як Ascender
, Descender
, TypoAscender
, TypoDescender
і UnitsPerEm
. Aspose.Font для Java API можна використовувати для відкриття файлів шрифтів TTF і читання інформації про показники шрифту з них за допомогою наступного прикладу коду.
1// For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-Java
2String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path
3
4 FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
5 TtfFont font = (TtfFont) Font.open(fd);
6
7 String name = font.getFontName();
8 System.out.println("Font name: " + name);
9 System.out.println("Glyph count: " + font.getNumGlyphs());
10 String metrics = MessageFormat.format(
11 "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
12 font.getMetrics().getAscender(), font.getMetrics().getDescender(),
13 font.getMetrics().getTypoAscender(), font.getMetrics().getTypoDescender(), font.getMetrics().getUnitsPerEM());
14
15 System.out.println(metrics);
16
17 //Get cmap unicode encoding table from font as object TtfCMapFormatBaseTable to access information about font glyph for symbol 'A'.
18 //Also check that font has object TtfGlyfTable (table 'glyf') to access glyph.
19 TtfCMapFormatBaseTable cmapTable = null;
20 if (font.getTtfTables().getCMapTable() != null)
21 {
22 cmapTable = font.getTtfTables().getCMapTable().findUnicodeTable();
23 }
24 if (cmapTable != null && font.getTtfTables().getGlyfTable() != null)
25 {
26 System.out.println("Font cmap unicode table: PlatformID = " + cmapTable.getPlatformId() +
27 ", PlatformSpecificID = " + cmapTable.getPlatformSpecificId());
28
29 //Code for 'A' symbol
30 char unicode = (char)65;
31
32 //Glyph index for 'A'
33 long glIndex = cmapTable.getGlyphIndex(unicode);
34
35 if (glIndex != 0)
36 {
37 //Glyph for 'A'
38 Glyph glyph = font.getGlyphById(glIndex);
39 if (glyph != null)
40 {
41 //Print glyph metrics
42 System.out.println("Glyph metrics for 'A' symbol:");
43 String bbox = MessageFormat.format(
44 "Glyph BBox: Xmin = {0}, Xmax = {1}" + ", Ymin = {2}, Ymax = {3}",
45 glyph.getGlyphBBox().getXMin(), glyph.getGlyphBBox().getXMax(),
46 glyph.getGlyphBBox().getYMin(), glyph.getGlyphBBox().getYMax());
47 System.out.println(bbox);
48 System.out.println("Width:" + font.getMetrics().getGlyphWidth(new GlyphUInt32Id(glIndex)));
49 }
50 }
51 }
Виявлення латинських символів
Aspose.Font для .API дозволяє виявляти латинські символи у файлах шрифтів TrueType. Цього можна досягти за допомогою наступного прикладу коду.
- Завантажте файл шрифту за допомогою FontFileDefinition
- Декодуйте GlyphId за допомогою методу DecodeToGid().
1// For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-Java
2String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path
3
4 FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
5 TtfFont ttfFont = (TtfFont) Font.open(fd);
6
7 boolean latinText = true;
8
9
10 for (int code = 65; code < 123; code++)
11 {
12 GlyphId gid = ttfFont.getEncoding().decodeToGid(code);
13 if (gid == null || gid == GlyphUInt32Id.getNotDef())
14 {
15 latinText = false;
16 }
17 }
18
19 if (latinText)
20 {
21 System.out.println(MessageFormat.format("Font {0} supports latin symbols.", ttfFont.getFontName()));
22 }
23 else
24 {
25 System.out.println(MessageFormat.format("Latin symbols are not supported by font {0}.", ttfFont.getFontName()));
26 }
Витяг ліцензійних обмежень
Використовуйте API Aspose.Font для Java, щоб отримати ліцензійні обмеження з файлів шрифтів. Шрифти можуть мати вбудовану інформацію про ліцензування в одному з наведених нижче режимів.
Вбудовування з можливістю редагування
- шрифт може бути вбудований і може бути тимчасово завантажений в інших системах. Крім того, дозволено редагування, включаючи можливість форматування нового тексту за допомогою вбудованого шрифту, і зміни можна зберегти.Installable Embedding
- Шрифт може бути вбудований і може бути постійно встановлений для використання на віддалених системах або для використання іншими користувачами.Вбудовування попереднього перегляду та друку
- шрифт може бути вбудований і може бути тимчасово завантажений в інших системах для перегляду або друку документа.Обмежене вбудовування
- шрифт не можна змінювати, вбудовувати або замінювати будь-яким способом без попереднього отримання явного дозволу законного власника.
У наведеному нижче прикладі коду показано, як використовувати об’єкт Aspose.Font.Ttf.LicenseFlags для отримання інформації про ліцензійні обмеження шрифтів (прапор fsType з таблиці OS/2) у зручній формі.
1// For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-Java
2String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; //Font file name with full path
3
4 FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
5 TtfFont font = (TtfFont) Font.open(fd);
6
7 LicenseFlags licenseFlags = null;
8 if (font.getTtfTables().getOs2Table() != null)
9 {
10 licenseFlags = font.getTtfTables().getOs2Table().getLicenseFlags();
11 }
12
13 if (licenseFlags == null || licenseFlags.isFSTypeAbsent())
14 {
15 System.out.println(MessageFormat.format("Font {0} has no embedded license restrictions", font.getFontName()));
16 }
17 else
18 {
19 if (licenseFlags.isEditableEmbedding())
20 {
21 System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded on other systems.", font.getFontName())
22 + " In addition, editing is permitted, including ability to format new text"
23 + " using the embedded font, and changes may be saved.");
24 }
25 else if (licenseFlags.isInstallableEmbedding())
26 {
27 System.out.println(MessageFormat.format("Font {0} may be embedded, and may be permanently installed", font.getFontName())
28 + " for use on a remote systems, or for use by other users.");
29 }
30 else if (licenseFlags.isPreviewAndPrintEmbedding())
31 {
32 System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded", font.getFontName())
33 + " on other systems for purposes of viewing or printing the document.");
34 }
35 else if (licenseFlags.isRestrictedLicenseEmbedding())
36 {
37 System.out.println(MessageFormat.format("Font {0} must not be modified, embedded or exchanged in any manner", font.getFontName())
38 + " without first obtaining explicit permission of the legal owner.");
39 }
40 }