Sök…


Anmärkningar

I de första versionerna av iText fanns det bara en typsnittklass: Font .

Med det här teckensnittet kan du skapa ett Font för fjorton teckensnitt från fem teckensnittsfamiljer: Helvetica (vanlig, fet, sned, fet-sned), Times Roman (vanlig, fet, kursiv, fet-kursiv), Courier (vanlig, fet , sned, djärv-sned), Symbol och Zapf Dingbats.

Ett sådant Font skapades så här:

Font font = new Font(FontFamily.TIMES_ROMAN);

Du måste också definiera teckensnittstorleken, till exempel:

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

Standardteckensnittet var Helvetica; standardtypstorlek 12.

iText utvecklades och fler teckensnitt stöds. BaseFont klassen användes för att hantera dessa typsnitt internt. En BaseFont klass skapades så här:

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

Den första parametern är vägen till ett teckensnittsprogram, till exempel en TTF-fil, den andra parametern är kodningen, till exempel CP1251 för kyrilliska tecken, den tredje parametern indikerar om en delmängd av teckensnittet måste inbäddas.

BaseFont klassen ska användas när du lägger till innehåll på lägsta nivå, till exempel när du skapar textobjekt i din kod med hjälp av beginText() , setFontAndSize() , setTextMatrix() , showText() , endText() . Vanligtvis kommer du bara att använda denna lågnivåmetod om du är PDF-specialist. Om du inte vet något om PDF-syntax, bör du inte använda en sådan sekvens.

Du kan också använda BaseFont klassen för att skapa ett Font :

Font russian = new Font(bf_russian, 12);

Nu kan vi använda det russian teckensnittet för att skapa ett Paragraph som innehåller rysk text.

Det finns några andra sätt i iText 5 att skapa Font , men det här är den vanligaste proceduren. Människor var ibland förvirrade av skillnaden mellan Font och BaseFont , och de använde inte alltid rätt inställning.

Vad vi fixade i iText 7:

Vi gjorde saker mer enhetliga. Det finns nu en enda PdfFont klass, och du skapar ett teckensnitt med ett PdfFontFactory :

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

Du behöver inte längre skapa olika teckensnittsobjekt om du vill byta till en annan teckenstorlek. Att byta till en annan teckensnittsstorlek kan enkelt göras med setFontSize() :

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

Standardteckensnittet är fortfarande Helvetica och standardtypstorleken är fortfarande 12, men du kan nu definiera ett teckensnitt (och en teckenstorlek) för dokumentet:

document.setFont(font);

I detta fall är font standardteckensnitt när du lägger till ett byggsten (till exempel ett Paragraph ) utan att ange ett teckensnitt.

Vill veta mer?

Läs Introduktion till PdfFont-klassen som är kapitel 1 i iText 7: Building Blocks- handledning. Skaffa gratis e-bok!

HelloWorldInternational.java (iText 5)

I detta iText 5-exempel skapar vi ett Hello World-exempel på olika språk med olika teckensnitt:

ange bildbeskrivning här

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

Källa: utvecklare.itextpdf.com

HelloWorldInternational.java (iText 7)

I detta iText 7-exempel skapar vi ett Hello World-exempel på olika språk med olika teckensnitt:

ange bildbeskrivning här

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

Källa: utvecklare.itextpdf.com och iText 7: Handledning för byggstenar .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow