Поиск…


замечания

В первых версиях 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 будет font по умолчанию при добавлении строительного блока (например, Paragraph ) без указания шрифта.

Хотите узнать больше?

Прочитайте Знакомство с классом PdfFont, который является главой 1 в учебнике iText 7: Building Blocks . Получите бесплатную электронную книгу!

HelloWorldInternational.java (iText 5)

В этом примере iText 5 мы создадим пример Hello World на разных языках, используя разные шрифты:

введите описание изображения здесь

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();
}

Источник: developers.itxtpdf.com

HelloWorldInternational.java (iText 7)

В этом примере iText 7 мы создадим пример Hello World на разных языках, используя разные шрифты:

введите описание изображения здесь

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);
    }
}

Источник: developers.itxtpdf.com и учебник iText 7: Building Blocks .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow