字体 iText 5 与 iText 7

在 iText 的第一个版本中,只有一个字体类:Font

使用此字体,你可以为五种字体系列中的十四种字体创建一个 Font 对象:Helvetica(常规,粗体,倾斜,粗斜),Times Roman(常规,粗体,斜体,粗体斜体),Courier(常规,粗体) ,斜,粗斜),符号和 Zapf Dingbats。

这样的 Font 对象是这样创建的:

Font font = new Font(FontFamily.TIMES_ROMAN);

你还必须定义字体大小,例如:

Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);

默认字体是 Helvetica; 默认字体大小 12。

iText 不断发展,支持更多字体。BaseFont 类用于在内部处理这些字体。BaseFont 类是这样创建的:

BaseFont bf_russian = BaseFont.createFont(
    "resources/fonts/FreeSans.ttf",
    "CP1251",
    BaseFont.EMBEDDED);

第一个参数是字体程序的路径,例如 TTF 文件,第二个参数是编码,例如 CP1251 表示西里尔字符,第三个参数表示是否需要嵌入字体的子集。

当你在最低级别添加内容时,将使用 BaseFont 类,例如在使用 beginText()setFontAndSize()setTextMatrix()showText()endText() 序列在代码中创建文本对象时。通常,如果你是 PDF 专家,则只能使用此低级方法。如果你对 PDF 语法一无所知,则不应使用此类序列。

你还可以使用 BaseFont 类创建 Font 对象:

Font russian = new Font(bf_russian, 12);

现在我们可以使用 russian 字体创建一个包含俄语文本的 Paragraph

iText 5 中还有其他一些方法可以创建 Font 对象,但这是最常用的方法。人们有时会对 FontBaseFont 之间的区别感到困惑,他们并不总是使用正确的方法。

我们在 iText 7 中修复了什么:

我们让事情更加统一。现在有一个 PdfFont 类,你使用 PdfFontFactory 创建一个字体:

PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
    "src/main/resources/fonts/FreeSans.ttf", "CP1251", true);

如果要切换到其他字体大小,则不再需要创建不同的字体对象。切换到不同的字体大小可以使用 setFontSize() 方法完成:

Paragraph p = new Paragraph("Hello World! ")
    .add(new Text("Hallo Wereld! ").setFontSize(14))
    .add(new Text("Bonjour le monde! ").setFontSize(10));

默认字体仍为 Helvetica,默认字体大小仍为 12,但你现在可以为文档定义字体(和字体大小):

document.setFont(font);

在这种情况下,font 将是添加构建块(例如 Paragraph)时的默认字体,而不指定字体。

想知道更多?

阅读介绍 PdfFont 类 ,它是 iText 7:Building Blocks教程的第 1 章。获得免费电子书!