IText字体不是子集或嵌入

时间:2015-01-13 06:30:15

标签: itext

我在大型机平台上并从Windows上传了arial.ttf。我使用了以下代码作为字体,但字体在Adobe中没有显示SUBSETTED或EMBEDDED。我甚至尝试过添加font.getBaseFont以强制嵌入。

为什么它不会嵌入或子集?

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

Adob​​e doc显示以下字体信息:

Type truetype
Encoding Ansi
Actual Font: ArialMT
Actual Font type: TrueType

1 个答案:

答案 0 :(得分:1)

您创建了一个BaseFont对象bf,但您没有对其进行任何操作。人们会期望你这样做:

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

在这种情况下,font会确保嵌入字体的子集,因为编码为Identity-H,iText始终嵌入具有该编码的字体的子集。

由于您没有对bf执行任何操作,因此就好像该行不存在一样。在这种情况下,我们留下:

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

假设arial.ttf的路径正确,并且该字体的别名为"arial",您现在正在使用默认编码(Ansi)创建一种字体,默认字体大小(12 )和默认嵌入(false)。

这与Adobe Reader中显示的内容一致。如果您想要嵌入字体的子集,至少需要:

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

回答你的问题:iText没有嵌入字体的原因是你没有告诉iText嵌入字体。