itext
Schriften: iText 5 versus iText 7
Suche…
Bemerkungen
In den ersten Versionen von iText gab es nur eine Schriftartklasse: Font
.
Mit dieser Schriftart können Sie ein Font
Objekt für vierzehn Schriftarten aus fünf Schriftfamilien erstellen: Helvetica (normal, fett, schräg, fett-oblique), Times Roman (normal, fett, kursiv, fett-kursiv), Courier (normal, fett) , schräg, fett-schräg), Symbol und Zapf Dingbats.
Ein solches Font
Objekt wurde folgendermaßen erstellt:
Font font = new Font(FontFamily.TIMES_ROMAN);
Sie mussten auch die Schriftgröße definieren, zum Beispiel:
Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);
Die Standardschriftart war Helvetica. die Standardschriftgröße 12.
iText wurde weiterentwickelt und weitere Schriftarten wurden unterstützt. Die BaseFont
Klasse wurde für den internen Umgang mit diesen Schriftarten verwendet. Eine BaseFont
Klasse wurde wie BaseFont
erstellt:
BaseFont bf_russian = BaseFont.createFont(
"resources/fonts/FreeSans.ttf",
"CP1251",
BaseFont.EMBEDDED);
Der erste Parameter ist der Pfad zu einem Schriftartprogramm, zum Beispiel eine TTF-Datei, der zweite Parameter ist die Kodierung, zum Beispiel CP1251 für kyrillische Zeichen. Der dritte Parameter gibt an, ob eine Teilmenge der Schriftart eingebettet werden muss.
Die BaseFont
Klasse wird verwendet, wenn Sie Inhalt auf der untersten Ebene hinzufügen, z. B. wenn Sie beginText()
in Ihrem Code mithilfe von beginText()
, setFontAndSize()
, setTextMatrix()
, showText()
und endText()
Sequenzen endText()
. Normalerweise verwenden Sie diesen einfachen Ansatz nur, wenn Sie ein PDF-Spezialist sind. Wenn Sie nichts über die PDF-Syntax wissen, sollten Sie keine solche Sequenz verwenden.
Sie können auch die BaseFont
Klasse verwenden, um ein Font
Objekt zu erstellen:
Font russian = new Font(bf_russian, 12);
Jetzt können wir die russian
Schrift verwenden, um einen Paragraph
zu erstellen, der russischen Text enthält.
In iText 5 gibt es einige andere Möglichkeiten, Font
Objekte zu erstellen. Dies ist jedoch die häufigste Vorgehensweise. Die Leute waren manchmal durch den Unterschied zwischen Font
und BaseFont
und verwendeten nicht immer den richtigen Ansatz.
Was wir in iText 7 behoben haben:
Wir haben die Dinge einheitlicher gemacht. Es gibt jetzt eine einzige PdfFont
Klasse, und Sie erstellen eine Schrift mit einer PdfFontFactory
:
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
"src/main/resources/fonts/FreeSans.ttf", "CP1251", true);
Sie müssen nicht mehr verschiedene Schriftobjekte erstellen, wenn Sie zu einer anderen Schriftgröße wechseln möchten. Das Umschalten auf eine andere Schriftgröße kann einfach mit der Methode setFontSize()
:
Paragraph p = new Paragraph("Hello World! ")
.add(new Text("Hallo Wereld! ").setFontSize(14))
.add(new Text("Bonjour le monde! ").setFontSize(10));
Die Standardschriftart ist immer noch Helvetica und die Standardschriftgröße ist immer noch 12, aber Sie können jetzt eine Schriftart (und eine Schriftgröße) für das Dokument definieren:
document.setFont(font);
In diesem Fall ist die font
die Standardschriftart, wenn Sie einen Baustein (z. B. einen Paragraph
) hinzufügen, ohne eine Schriftart anzugeben.
Möchten Sie mehr wissen?
Lesen Sie dazu Einführung in die PdfFont-Klasse aus Kapitel 1 des Lernprogramms " iText 7: Building Blocks" . Holen Sie sich das kostenlose E-Book!
HelloWorldInternational.java (iText 5)
In diesem iText 5-Beispiel erstellen wir ein Hello World-Beispiel in verschiedenen Sprachen und verwenden verschiedene Schriftarten:
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();
}
Quelle: developer.itextpdf.com
HelloWorldInternational.java (iText 7)
In diesem iText 7-Beispiel erstellen wir ein Hello World-Beispiel in verschiedenen Sprachen und verwenden verschiedene Schriftarten:
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);
}
}
Quelle: developer.itextpdf.com und das Tutorial zu iText 7: Bausteine .