字体 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
对象,但这是最常用的方法。人们有时会对 Font
和 BaseFont
之间的区别感到困惑,他们并不总是使用正确的方法。
我们在 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 章。获得免费电子书!