0

I am on the mainframe platform and uploaded the arial.ttf from Windows.
I used the following code for the font, but the font does not show SUBSETTED or EMBEDDED in Adobe.
I even tried to add font.getBaseFont to force it to embed.

Any reason why it would not embed or subset?

String font1 = "arial.ttf";                                                
FontFactory.register(font1,"myfont");                                      
BaseFont bf = BaseFont.createFont(font1, BaseFont.IDENTITY_H, true);       
Font font =  FontFactory.getFont("arial");   

font.getBaseFont().setSubset(true);    

Adobe doc show the following font information:

Type truetype
Encoding Ansi
Actual Font: ArialMT
Actual Font type: TrueType
Dharmesh Porwal
  • 1,406
  • 2
  • 12
  • 21
user1579878
  • 107
  • 7
  • BaseFont bf = BaseFont.createFont("arial.ttf", BaseFont.IDENTITY_H, true); Font font = new Font(bf, 12); – user1579878 Jan 13 '15 at 10:49
  • Thanks Bruno. You were right I need to add Font font = new Font(bf, 12); Also the font in Adobe showing 'Unknown' was due to a wrong encoding, unrelated to iText, which caused a corruption in the PDF. – user1579878 Jan 19 '15 at 15:56

1 Answers1

1

You create a BaseFont object bf, but you aren't doing anything with it. One would expect that you do this:

BaseFont bf = BaseFont.createFont(pathToFont, BaseFont.IDENTITY_H, true);
Font font = new Font(bf, 12);

In this case, font would make sure that a subset of the font is embedded because the encoding is Identity-H and iText always embeds a subset of a font with that encoding.

As you aren't doing anything with bf, it is as if the line isn't present. In that case, we are left with:

String font1 = "arial.ttf";                                                
FontFactory.register(font1,"myfont");    
Font font =  FontFactory.getFont("arial"); 

Assuming that the path to arial.ttf is correct, and that the alias of that font is "arial", you are now creating a font with the default encoding (Ansi), the default font size (12) and the default embedding (false).

That is in line with what is shown in Adobe Reader. If you want a subset of the font to be embedded, you need at least:

Font font =  FontFactory.getFont("arial", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

In answer to your question: the reason why the font is not embedded by iText is the fact that you are not telling iText to embed the font.

Bruno Lowagie
  • 75,994
  • 9
  • 109
  • 165