我在大型机平台上并从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);
Adobe doc显示以下字体信息:
Type truetype
Encoding Ansi
Actual Font: ArialMT
Actual Font type: TrueType
答案 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嵌入字体。