Zoeken…


Opmerkingen

In de eerste versies van iText was er slechts één lettertypeklasse: Font .

Met dit lettertype kunt u een Font maken voor veertien lettertypen uit vijf lettertypefamilies: Helvetica (normaal, vet, schuin, vet-schuin), Times Roman (normaal, vet, cursief, vet-cursief), Courier (normaal, vet , schuin, vet-schuin), Symbol en Zapf Dingbats.

Zo'n Font object is als volgt gemaakt:

Font font = new Font(FontFamily.TIMES_ROMAN);

Je moest ook de lettergrootte definiëren, bijvoorbeeld:

Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);

Het standaardlettertype was Helvetica; de standaard lettergrootte 12.

iText evolueerde en meer lettertypen werden ondersteund. De klasse BaseFont werd gebruikt om intern met deze lettertypen om te gaan. Een klasse BaseFont is als volgt gemaakt:

BaseFont bf_russian = BaseFont.createFont(
    "resources/fonts/FreeSans.ttf",
    "CP1251",
    BaseFont.EMBEDDED);

De eerste parameter is het pad naar een lettertypeprogramma, bijvoorbeeld een TTF-bestand, de tweede parameter is de codering, bijvoorbeeld CP1251 voor Cyrillische tekens, de derde parameter geeft aan of een subset van het lettertype moet worden ingesloten.

De klasse BaseFont moet worden gebruikt wanneer u inhoud op het laagste niveau toevoegt, bijvoorbeeld bij het maken van tekstobjecten in uw code met de beginText() , setFontAndSize() , setTextMatrix() , showText() , endText() . Doorgaans gebruikt u deze benadering op laag niveau alleen als u een PDF-specialist bent. Als u niets van de PDF-syntaxis weet, moet u een dergelijke reeks niet gebruiken.

U kunt ook de klasse BaseFont gebruiken om een object Font maken:

Font russian = new Font(bf_russian, 12);

Nu kunnen we het russian lettertype gebruiken om een Paragraph met Russische tekst te maken.

Er zijn enkele andere manieren in iText 5 om Font objecten te maken, maar dit is de meest voorkomende procedure. Mensen waren soms in de war door het verschil tussen Font en BaseFont , en ze gebruikten niet altijd de juiste aanpak.

Wat we hebben opgelost in iText 7:

We hebben dingen uniformer gemaakt. Er is nu een enkele PdfFont klasse en u maakt een lettertype met een PdfFontFactory :

PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
    "src/main/resources/fonts/FreeSans.ttf", "CP1251", true);

U hoeft niet langer verschillende lettertype-objecten te maken als u wilt overschakelen naar een andere lettergrootte. Overschakelen naar een andere lettergrootte kan eenvoudig worden gedaan met behulp van de methode setFontSize() :

Paragraph p = new Paragraph("Hello World! ")
    .add(new Text("Hallo Wereld! ").setFontSize(14))
    .add(new Text("Bonjour le monde! ").setFontSize(10));

Het standaardlettertype is nog steeds Helvetica en de standaardlettergrootte is nog steeds 12, maar u kunt nu een lettertype (en een lettergrootte) voor het document definiëren:

document.setFont(font);

In dit geval is het font het standaardlettertype bij het toevoegen van een bouwsteen (bijvoorbeeld een Paragraph ) zonder een lettertype op te geven.

Wil meer weten?

Lees Introductie van de PdfFont-klasse uit hoofdstuk 1 in de tutorial iText 7: Building Blocks . Ontvang het gratis ebook!

HelloWorldInternational.java (iText 5)

In dit iText 5-voorbeeld maken we een Hello World-voorbeeld in verschillende talen, met verschillende lettertypen:

voer hier de afbeeldingsbeschrijving in

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

Bron: developers.itextpdf.com

HelloWorldInternational.java (iText 7)

In dit iText 7-voorbeeld maken we een Hello World-voorbeeld in verschillende talen, met verschillende lettertypen:

voer hier de afbeeldingsbeschrijving in

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

Bron: developers.itextpdf.com en de tutorial iText 7: Building Blocks .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow