itext
Colonne: iText 5 contro iText 7
Ricerca…
Osservazioni
In iText 5, non è possibile utilizzare il metodo add()
per aggiungere un Paragraph
a un Document
se si desidera organizzare il contenuto in colonne. Non possiamo riutilizzare il codice dell'esempio Text2Pdf.java (iText 5) .
Invece dobbiamo creare un oggetto ColumnText
, dobbiamo aggiungere tutti gli oggetti Paragraph
a questo oggetto, e una volta che abbiamo finito di aggiungere tutto il contenuto, possiamo iniziare a renderizzare quel contenuto usando il metodo go()
. Nel fare ciò, dobbiamo tenere traccia delle colonne e creare nuove pagine quando necessario.
Cosa abbiamo risolto in iText 7:
Con iText 7, possiamo copiare e incollare il codice dall'esempio Text2Pdf.java (iText 7) . Possiamo continuare ad usare il metodo add()
nello stesso modo in cui lo abbiamo fatto prima. Se vogliamo rendere il contenuto in due colonne anziché in una, dobbiamo semplicemente cambiare il renderer del documento:
Rectangle[] columns = {
new Rectangle(36, 36, 254, 770),
new Rectangle(305, 36, 254, 770)};
document.setRenderer(new ColumnDocumentRenderer(document, columns));
Voglio sapere di più?
Leggi Lavorare con RootElement, che è il capitolo 5 del tutorial di iText 7: Building Blocks . Ottieni l'ebook gratuito!
Text2PdfColumns.java (iText 5)
Supponiamo di avere il seguente file di testo: jekyll_hyde.txt
Come lo convertiamo in un PDF che assomiglia a questo:
Quando usi iText 5, ti serve un codice come questo:
public void createPdf(String dest)
throws DocumentException, IOException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
ColumnText ct = new ColumnText(writer.getDirectContent());
BufferedReader br = new BufferedReader(new FileReader(TEXT));
String line;
Paragraph p;
Font normal = new Font(FontFamily.TIMES_ROMAN, 12);
Font bold = new Font(FontFamily.TIMES_ROMAN, 12, Font.BOLD);
boolean title = true;
while ((line = br.readLine()) != null) {
p = new Paragraph(line, title ? bold : normal);
p.setAlignment(Element.ALIGN_JUSTIFIED);
title = line.isEmpty();
ct.addElement(p);
}
Rectangle[] columns = {
new Rectangle(36, 36, 290, 806), new Rectangle(305, 36, 559, 806)
};
int c = 0;
int status = ColumnText.START_COLUMN;
while (ColumnText.hasMoreText(status)) {
ct.setSimpleColumn(columns[c]);
status = ct.go();
if (++c == 2) {
document.newPage();
c = 0;
}
}
document.close();
}
Fonte: developers.itextpdf.com
Text2PdfColumns.java (iText 7)
Supponiamo di avere il seguente file di testo: jekyll_hyde.txt
Come lo convertiamo in un PDF che assomiglia a questo:
Quando usi iText 7, ti serve un codice come questo:
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Document document = new Document(pdf)
.setTextAlignment(TextAlignment.JUSTIFIED);
Rectangle[] columns = {
new Rectangle(36, 36, 254, 770),
new Rectangle(305, 36, 254, 770)};
document.setRenderer(new ColumnDocumentRenderer(document, columns));
BufferedReader br = new BufferedReader(new FileReader(TEXT));
String line;
PdfFont normal = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont bold = PdfFontFactory.createFont(FontConstants.TIMES_BOLD);
boolean title = true;
while ((line = br.readLine()) != null) {
document.add(new Paragraph(line).setFont(title ? bold : normal));
title = line.isEmpty();
}
document.close();
}
Fonte: developers.itextpdf.com e il tutorial di iText 7: Building Blocks .