字型 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 章。獲得免費電子書!