If you are looking for the decompiler itself, visit https://github.com/jindrapetrik/jpexs-decompiler
NEW : We have got a new blog where we post some interesting SWF internals info.

#541 How to calculate GlyphAdvance
Author:
rendu2mai

Date created:
Type: question
Visibility: Everybody
Assigned to:
JPEXS

Labels: Text
State: closed 

I'm trying to make a small tool to extract Text string. And some problem come out while
I'm dealing with DefineText. Now I know it's related to DefineFont, such as GlyphIndex is
the index of the character in the specified font. However, I cannot calculate
GlyphAdvance. I found some Font have FontAdvance value, so text.GlyphAdvance =
font.FontAdvance * text.TextHeight /20480. But some Font donot have FontAdvance value.
Would you pls tell me how to calculate those who donot have FontAdvance value?
What you want glyph advance for?
You want to modify text?
If you want to add new character to a text,
you need glyphindex and glyphadvance.
If the font "has layout", then it is easy, you take advance value from font advance table
for the glyph.
If the font does not contain advance table, then you can't do anything about this.
Fonts without advanced table are usually generated for static texts when there is no need
to insert new text at runtime.
Only thing you "can" do is to get the font name and in your application get advance value
from that font installed on your machine. This unfortunately depends on installed system
fonts:-(.
In java, I do it this way:
Font fnt = new Font(fontName, fontStyle, 1024);
glyphAdvance = getDivider() * Math.round(fnt.createGlyphVector((new
JPanel()).getFontMetrics(fnt).getFontRenderContext(), "" +
character).getGlyphMetrics(0).getAdvanceX();
Ok, thanks a lot. I'll try another way, just use TextHeight instead of GlyphAdvance as
Chinese font have the same Advance which happens to be TextHeight .
State: opened→closed