itext
Fuentes: iText 5 versus iText 7
Buscar..
Observaciones
En las primeras versiones de iText, solo había una clase de fuente: Font .
Con esta fuente, puede crear un objeto de Font para catorce fuentes de cinco familias de fuentes: Helvetica (regular, negrita, oblicua, negrita-oblicua), Times Roman (regular, negrita, cursiva, negrita-cursiva), Courier (regular, negrita , oblicuo, negrita-oblicuo), Symbol y Zapf Dingbats.
Tal objeto de Font fue creado así:
Font font = new Font(FontFamily.TIMES_ROMAN);
También tenías que definir el tamaño de la fuente, por ejemplo:
Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);
La fuente por defecto era Helvetica; el tamaño de fuente predeterminado 12.
iText evolucionó y se soportaron más fuentes. La clase BaseFont se utilizó para tratar estas fuentes internamente. Una clase de BaseFont fue creada así:
BaseFont bf_russian = BaseFont.createFont(
"resources/fonts/FreeSans.ttf",
"CP1251",
BaseFont.EMBEDDED);
El primer parámetro es la ruta a un programa de fuentes, por ejemplo, un archivo TTF, el segundo parámetro es la codificación, por ejemplo CP1251 para caracteres cirílicos, el tercer parámetro indica si es necesario incrustar un subconjunto de la fuente.
La clase BaseFont se usará cuando agregue contenido en el nivel más bajo, por ejemplo, cuando cree objetos de texto en su código usando las beginText() , setFontAndSize() , setTextMatrix() , showText() , endText() . Por lo general, solo utilizará este enfoque de bajo nivel si es un especialista en PDF. Si no sabe nada de la sintaxis de PDF, no debe usar esa secuencia.
También puede usar la clase BaseFont para crear un objeto de Font :
Font russian = new Font(bf_russian, 12);
Ahora podemos usar la fuente russian para crear un Paragraph que contenga texto en ruso.
Hay otras formas en iText 5 para crear objetos de Font , pero este es el procedimiento más común. Las personas a veces se confundían con la diferencia entre Font y BaseFont , y no siempre utilizaban el enfoque correcto.
Lo que arreglamos en iText 7:
Hicimos las cosas más uniformes. Ahora hay una sola clase PdfFont , y creas una fuente usando un PdfFontFactory :
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
"src/main/resources/fonts/FreeSans.ttf", "CP1251", true);
Ya no necesita crear objetos de fuente diferentes si desea cambiar a otro tamaño de fuente. El cambio a un tamaño de fuente diferente se puede hacer simplemente usando el método setFontSize() :
Paragraph p = new Paragraph("Hello World! ")
.add(new Text("Hallo Wereld! ").setFontSize(14))
.add(new Text("Bonjour le monde! ").setFontSize(10));
La fuente predeterminada sigue siendo Helvetica y el tamaño de fuente predeterminado sigue siendo 12, pero ahora puede definir una fuente (y un tamaño de fuente) para el documento:
document.setFont(font);
En este caso, la font será la fuente predeterminada al agregar un bloque de construcción (por ejemplo, un Paragraph ) sin especificar una fuente.
¿Quiere saber más?
Lea Introducción a la clase PdfFont, que es el capítulo 1 del tutorial de iText 7: Building Blocks . ¡Consigue el ebook gratis!
HelloWorldInternational.java (iText 5)
En este ejemplo de iText 5, crearemos un ejemplo de Hello World en diferentes idiomas, utilizando diferentes fuentes:
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();
}
Fuente: developers.itextpdf.com
HelloWorldInternational.java (iText 7)
En este ejemplo de iText 7, crearemos un ejemplo de Hello World en diferentes idiomas, utilizando diferentes fuentes:
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);
}
}
Fuente: developers.itextpdf.com y el tutorial de iText 7: Building Blocks .

