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:

wprowadź opis zdjęcia tutaj

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:

wprowadź opis zdjęcia tutaj

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 .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow