问题 iText,Font,BaseFont和createFont()发生了什么?


关于font和basefont发生了什么,我有很多神秘感。特别是在构造函数方面。 iText网站将此行作为新字体的示例代码

 BaseFont unicode = BaseFont.createFont("c:/windows/fonts/arialuni.ttf", 
                        BaseFont.IDENTITY_H, 
                        BaseFont.EMBEDDED);

我可以接听这个电话:

BaseFont bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1257, 
                  BaseFont.EMBEDDED);

但是,如果我用BaseFont.HELVETICA替换BaseFont.CP1257然后它不起作用,我得到一个页面说“无法加载pdf文档”。

我尝试查看类文件,我似乎无法弄清楚第二个参数是什么(我假设它是类似于备份字体,如果第一个字体不起作用,如在HTML中)我可以弄清楚为什么有些字体会起作用而不是其他字体。


9717
2017-07-06 16:44


起源



答案:


加载它 从你的罐子里面 使用前导斜杠 除此以外,只需使用字体的绝对路径(“C:[...] \ fonts \ Sansation_Regular.ttf”)。例如:

Font font = FontFactory.getFont("/fonts/Sansation_Regular.ttf",
    BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 0.8f, Font.NORMAL, BaseColor.BLACK);
BaseFont baseFont = font.getBaseFont();

8
2017-12-17 20:29



有帮助,但没有回答这个问题。 - Sean Connolly
是什么 0.8f 漂浮在这里?这是我见过的30个引用(包括官方文档)中的第一个,它实际上向您展示了如何在itext中引用和使用字体。谢谢。 - Kyle Vassella


答案:


加载它 从你的罐子里面 使用前导斜杠 除此以外,只需使用字体的绝对路径(“C:[...] \ fonts \ Sansation_Regular.ttf”)。例如:

Font font = FontFactory.getFont("/fonts/Sansation_Regular.ttf",
    BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 0.8f, Font.NORMAL, BaseColor.BLACK);
BaseFont baseFont = font.getBaseFont();

8
2017-12-17 20:29



有帮助,但没有回答这个问题。 - Sean Connolly
是什么 0.8f 漂浮在这里?这是我见过的30个引用(包括官方文档)中的第一个,它实际上向您展示了如何在itext中引用和使用字体。谢谢。 - Kyle Vassella


第二个参数是编码。

有关更多信息,请参阅此处的文档。


4
2017-08-15 14:37





这对我有用。老帖子,但我找不到简单的答案。

//Here you setup the font that you want. I put it under the root/Content/fonts folder in my project
Font font = FontFactory.GetFont("~/Content/fonts/ARIALN.ttf", BaseFont.CP1252,false, 9);

//Here I create the paragraph then assign the font to it at the end
var addressAttn = new Paragraph("Attn:  Manager, Billing Services", font);

0
2017-07-08 12:51