itext
Czcionki: iText 5 kontra iText 7
Szukaj…
Uwagi
W pierwszych wersjach iText istniała tylko jedna klasa Font
: Font
.
Za pomocą tej czcionki można utworzyć obiekt Font
dla czternastu czcionek z pięciu rodzin czcionek: Helvetica (zwykła, pogrubiona, ukośna, pogrubiona-ukośna), Times Roman (zwykła, pogrubiona, kursywa, pogrubiona kursywą), Kurier (zwykła, pogrubiona , ukośne, pogrubione-ukośne), Symbol i Zapf Dingbats.
Taki obiekt Font
został utworzony w następujący sposób:
Font font = new Font(FontFamily.TIMES_ROMAN);
Trzeba też było zdefiniować rozmiar czcionki, na przykład:
Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);
Domyślną czcionką była Helvetica; domyślny rozmiar czcionki 12.
iText ewoluował i obsługiwanych było więcej czcionek. Do BaseFont
radzenia sobie z tymi czcionkami BaseFont
klasy BaseFont
. BaseFont
klasę BaseFont
następujący sposób:
BaseFont bf_russian = BaseFont.createFont(
"resources/fonts/FreeSans.ttf",
"CP1251",
BaseFont.EMBEDDED);
Pierwszy parametr to ścieżka do programu czcionek, na przykład plik TTF, drugi parametr to kodowanie, na przykład CP1251 dla znaków cyrylicy, trzeci parametr wskazuje, czy należy osadzić podzbiór czcionki.
Z klasy BaseFont
należy korzystać podczas dodawania zawartości na najniższym poziomie, na przykład podczas tworzenia obiektów tekstowych w kodzie za pomocą beginText()
, setFontAndSize()
, setTextMatrix()
, showText()
, endText()
. Zazwyczaj będziesz stosować to podejście na niskim poziomie tylko, jeśli jesteś specjalistą od plików PDF. Jeśli nic nie wiesz o składni PDF, nie powinieneś używać takiej sekwencji.
Możesz także użyć klasy BaseFont
aby utworzyć obiekt Font
:
Font russian = new Font(bf_russian, 12);
Teraz możemy użyć russian
czcionki do utworzenia Paragraph
zawierającego rosyjski tekst.
Istnieje kilka innych sposobów tworzenia obiektów Font
w iText 5, ale jest to najczęstsza procedura. Ludzie czasami byli zdezorientowani różnicą między Font
a BaseFont
i nie zawsze stosowali prawidłowe podejście.
Co naprawiliśmy w iText 7:
Sprawiliśmy, że wszystko stało się bardziej jednolite. Jest teraz jedna klasa PdfFont
, a ty tworzysz czcionkę za pomocą PdfFontFactory
:
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
"src/main/resources/fonts/FreeSans.ttf", "CP1251", true);
Nie musisz już tworzyć różnych obiektów czcionek, jeśli chcesz przełączyć na inny rozmiar czcionki. Przełączanie na inny rozmiar czcionki można po prostu wykonać za pomocą metody setFontSize()
:
Paragraph p = new Paragraph("Hello World! ")
.add(new Text("Hallo Wereld! ").setFontSize(14))
.add(new Text("Bonjour le monde! ").setFontSize(10));
Domyślna czcionka to Helvetica, a domyślny rozmiar to 12, ale możesz teraz zdefiniować czcionkę (i rozmiar czcionki) dla dokumentu:
document.setFont(font);
W takim przypadku font
będzie font
domyślną podczas dodawania bloku konstrukcyjnego (na przykład Paragraph
) bez określania czcionki.
Chcieć wiedzieć więcej?
Przeczytaj Wprowadzenie do klasy PdfFont, która jest rozdziałem 1 w samouczku iText 7: Building Blocks . Zdobądź bezpłatny ebook!
HelloWorldInternational.java (iText 5)
W tym przykładzie iText 5 utworzymy przykład Hello World w różnych językach, używając różnych czcionek:
public void createPdf(String dest)
throws DocumentException, IOException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
Font font = new Font(FontFamily.TIMES_ROMAN);
Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);
Font font10pt = new Font(FontFamily.TIMES_ROMAN, 10);
BaseFont bf_russian = BaseFont.createFont(
"resources/fonts/FreeSans.ttf",
"CP1251",
BaseFont.EMBEDDED);
Font russian = new Font(bf_russian, 12);
BaseFont bf_cjk = BaseFont.createFont(
"resources/fonts/NotoSansCJKsc-Regular.otf",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
Font cjk = new Font(bf_cjk, 12);
Paragraph p = new Paragraph("Hello World! ", font);
Chunk chunk = new Chunk("Hallo Wereld! ", font14pt);
p.add(chunk);
chunk = new Chunk("Bonjour le monde! ", font10pt);
chunk.setTextRise(4);
p.add(chunk);
chunk = new Chunk(
"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u043b\u0442\u0435 \u043c\u0438\u0440! ",
russian);
p.add(chunk);
p.add(new Chunk("\u4f60\u597d\u4e16\u754c! ", cjk));
p.add(new Chunk("\uc5ec\ubcf4\uc138\uc694 \uc138\uacc4!", cjk));
document.add(p);
document.close();
}
Źródło: developers.itextpdf.com
HelloWorldInternational.java (iText 7)
W tym przykładzie iText 7 utworzymy przykład Hello World w różnych językach, używając różnych czcionek:
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
try (Document document = new Document(pdf)) {
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
"src/main/resources/fonts/FreeSans.ttf",
"CP1251", true);
PdfFont cjk = PdfFontFactory.createFont(
"src/main/resources/fonts/NotoSansCJKsc-Regular.otf",
PdfEncodings.IDENTITY_H, true);
document.setFont(font);
Paragraph p = new Paragraph("Hello World! ")
.add(new Text("Hallo Wereld! ").setFontSize(14))
.add(new Text("Bonjour le monde! ").setFontSize(10).setTextRise(4))
.add(
new Text("\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u043b\u0442\u0435 \u043c\u0438\u0440! ")
.setFont(russian))
.add(new Text("\u4f60\u597d\u4e16\u754c! ")
.setFont(cjk))
.add(new Text("\uc5ec\ubcf4\uc138\uc694 \uc138\uacc4!")
.setFont(cjk));
document.add(p);
}
}
Źródło: developers.itextpdf.com i samouczek iText 7: Building Blocks .