itext
Caratteri: iText 5 contro iText 7
Ricerca…
Osservazioni
Nelle prime versioni di iText, c'era solo una classe di font: Font
.
Con questo tipo di carattere, è possibile creare un oggetto Font
per quattordici caratteri da cinque famiglie di caratteri: Helvetica (normale, grassetto, obliquo, grassetto-obliquo), Times Roman (normale, grassetto, corsivo, grassetto-corsivo), Courier (normale, grassetto , oblique, bold-oblique), Symbol and Zapf Dingbats.
Tale oggetto Font
stato creato in questo modo:
Font font = new Font(FontFamily.TIMES_ROMAN);
Devi anche definire la dimensione del carattere, ad esempio:
Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);
Il carattere predefinito era Helvetica; la dimensione del carattere predefinito 12.
iText si è evoluto e sono stati supportati altri font. La classe BaseFont
è stata utilizzata per gestire internamente questi caratteri. Una classe BaseFont
è stata creata in questo modo:
BaseFont bf_russian = BaseFont.createFont(
"resources/fonts/FreeSans.ttf",
"CP1251",
BaseFont.EMBEDDED);
Il primo parametro è il percorso di un programma font, ad esempio un file TTF, il secondo parametro è la codifica, ad esempio CP1251 per i caratteri cirillici, il terzo parametro indica se è necessario incorporare un sottoinsieme del carattere.
La classe BaseFont
deve essere utilizzata quando si aggiunge contenuto al livello più basso, ad esempio quando si creano oggetti di testo nel codice usando beginText()
, setFontAndSize()
, setTextMatrix()
, showText()
, endText()
sequenze. In genere, utilizzerai questo approccio di basso livello solo se sei uno specialista di PDF. Se non si conosce nulla della sintassi PDF, non si dovrebbe usare una tale sequenza.
Puoi anche usare la classe BaseFont
per creare un oggetto Font
:
Font russian = new Font(bf_russian, 12);
Ora possiamo usare il carattere russian
per creare un Paragraph
che contenga testo russo.
Ci sono altri modi in iText 5 per creare oggetti Font
, ma questa è la procedura più comune. Le persone erano a volte confuse dalla differenza tra Font
e BaseFont
, e non sempre utilizzavano l'approccio corretto.
Cosa abbiamo risolto in iText 7:
Abbiamo reso le cose più uniformi. Ora esiste una sola classe PdfFont
e tu crei un font usando un PdfFontFactory
:
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
"src/main/resources/fonts/FreeSans.ttf", "CP1251", true);
Non è più necessario creare oggetti font diversi se si desidera passare a un'altra dimensione di carattere. Passare a una dimensione di carattere diversa può essere semplicemente fatto usando il metodo setFontSize()
:
Paragraph p = new Paragraph("Hello World! ")
.add(new Text("Hallo Wereld! ").setFontSize(14))
.add(new Text("Bonjour le monde! ").setFontSize(10));
Il font predefinito è ancora Helvetica e la dimensione del font predefinito è ancora 12, ma ora puoi definire un font (e una dimensione font) per il documento:
document.setFont(font);
In questo caso, il font
sarà il carattere predefinito quando si aggiunge un blocco predefinito (ad esempio un Paragraph
) senza specificare un carattere.
Voglio sapere di più?
Leggi Introduzione alla classe PdfFont, che è il capitolo 1 del tutorial di iText 7: Building Blocks . Ottieni l'ebook gratuito!
HelloWorldInternational.java (iText 5)
In questo esempio di iText 5, creeremo un esempio Hello World in diverse lingue, utilizzando diversi tipi di carattere:
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();
}
Fonte: developers.itextpdf.com
HelloWorldInternational.java (iText 7)
In questo esempio di iText 7, creeremo un esempio Hello World in diverse lingue, utilizzando diversi tipi di carattere:
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);
}
}
Fonte: developers.itextpdf.com e il tutorial di iText 7: Building Blocks .