itext
Polices: iText 5 contre iText 7
Recherche…
Remarques
Dans les premières versions d'iText, il n'y avait qu'une seule classe de Font : Font .
Avec cette police, vous pouvez créer un objet Font pour quatorze polices de cinq familles de polices: Helvetica (normal, gras, oblique, gras-oblique), Times Roman (normal, gras, italique, gras-italique), Courier (régulier, gras). , oblique, oblique-oblique), Symboles et Symboles Zapf.
Un tel objet Font été créé comme ceci:
Font font = new Font(FontFamily.TIMES_ROMAN);
Vous devez également définir la taille de la police, par exemple:
Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);
La police par défaut était Helvetica; la taille de police par défaut 12.
iText a évolué et plus de polices ont été prises en charge. La classe BaseFont été utilisée pour traiter ces polices en interne. Une classe BaseFont été créée comme ceci:
BaseFont bf_russian = BaseFont.createFont(
"resources/fonts/FreeSans.ttf",
"CP1251",
BaseFont.EMBEDDED);
Le premier paramètre est le chemin vers un programme de police, par exemple un fichier TTF, le deuxième paramètre est le codage, par exemple CP1251 pour les caractères cyrilliques, le troisième paramètre indique si un sous-ensemble de la police doit être intégré.
La classe BaseFont doit être utilisée lorsque vous ajoutez du contenu au niveau le plus bas, par exemple lors de la création d'objets de texte dans votre code à l'aide des beginText() , setFontAndSize() , setTextMatrix() , showText() et endText() . En règle générale, vous utiliserez cette approche de bas niveau uniquement si vous êtes un spécialiste du PDF. Si vous ne connaissez rien de la syntaxe PDF, vous ne devriez pas utiliser une telle séquence.
Vous pouvez également utiliser la classe BaseFont pour créer un objet Font :
Font russian = new Font(bf_russian, 12);
Maintenant, nous pouvons utiliser la police russian pour créer un Paragraph contenant du texte russe.
Il existe d'autres moyens dans iText 5 pour créer des objets Font , mais c'est la procédure la plus courante. Les gens étaient parfois déroutés par la différence entre Font et BaseFont , et ils n'utilisaient pas toujours la bonne approche.
Ce que nous avons corrigé dans iText 7:
Nous avons rendu les choses plus uniformes. Il existe maintenant une seule classe PdfFont et vous créez une police à l'aide de PdfFontFactory :
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
"src/main/resources/fonts/FreeSans.ttf", "CP1251", true);
Vous n'avez plus besoin de créer différents objets de police si vous souhaitez passer à une autre taille de police. Passer à une taille de police différente peut simplement être fait en utilisant la méthode setFontSize() :
Paragraph p = new Paragraph("Hello World! ")
.add(new Text("Hallo Wereld! ").setFontSize(14))
.add(new Text("Bonjour le monde! ").setFontSize(10));
La police par défaut est toujours Helvetica et la taille de police par défaut est toujours 12, mais vous pouvez maintenant définir une police (et une taille de police) pour le document:
document.setFont(font);
Dans ce cas, la font sera la police par défaut lors de l'ajout d'un bloc de construction (par exemple, un Paragraph ) sans spécifier de police.
Veulent en savoir plus?
Lisez Introduction à la classe PdfFont qui est le chapitre 1 du tutoriel iText 7: Building Blocks . Obtenez l'ebook gratuit!
HelloWorldInternational.java (iText 5)
Dans cet exemple iText 5, nous allons créer un exemple Hello World en différentes langues, en utilisant différentes polices:
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();
}
Source: developers.itextpdf.com
HelloWorldInternational.java (iText 7)
Dans cet exemple iText 7, nous allons créer un exemple Hello World en différentes langues, en utilisant différentes polices:
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);
}
}
Source: developers.itextpdf.com et le tutoriel iText 7: Building Blocks .

