Render data as table
Examples written in answer to the questions:
Click How to create a table based on a two-dimensional array?
Click How can I convert a CSV file to a table with a repeating header row?
arraytotable
JAVA
JAVA
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2023 Apryse Group NV
Authors: Apryse Software.
For more information, please contact iText Software at this address:
sales@itextpdf.com
*/
package com.itextpdf.samples.sandbox.tables;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.properties.UnitValue;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToTable {
public static final String DEST = "./target/sandbox/tables/array_to_table.pdf";
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new ArrayToTable().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
// By default column width is calculated automatically for the best fit.
// useAllAvailableWidth() method makes table use the whole page's width while placing the content.
Table table = new Table(UnitValue.createPercentArray(8)).useAllAvailableWidth();
List<List<String>> dataset = getData();
for (List<String> record : dataset) {
for (String field : record) {
table.addCell(new Cell().add(new Paragraph(field)));
}
}
doc.add(table);
doc.close();
}
private static List<List<String>> getData() {
List<List<String>> data = new ArrayList<>();
String[] tableTitleList = {" Title", " (Re)set", " Obs", " Mean", " Std.Dev", " Min", " Max", "Unit"};
data.add(Arrays.asList(tableTitleList));
for (int i = 0; i < 10; i++) {
List<String> dataLine = new ArrayList<>();
for (int j = 0; j < tableTitleList.length; j++) {
dataLine.add(tableTitleList[j] + " " + (i + 1));
}
data.add(dataLine);
}
return data;
}
}
C#
C#
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
namespace iText.Samples.Sandbox.Tables
{
public class ArrayToTable
{
public static readonly string DEST = "results/sandbox/tables/array_to_table.pdf";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new ArrayToTable().ManipulatePdf(DEST);
}
private void ManipulatePdf(string dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
// By default column width is calculated automatically for the best fit.
// useAllAvailableWidth() method makes table use the whole page's width while placing the content.
Table table = new Table(UnitValue.CreatePercentArray(8)).UseAllAvailableWidth();
List<List<string>> dataset = GetData();
foreach (List<string> record in dataset)
{
foreach (string field in record)
{
table.AddCell(new Cell().Add(new Paragraph(field)));
}
}
doc.Add(table);
doc.Close();
}
private static List<List<string>> GetData()
{
List<List<string>> data = new List<List<string>>();
String[] tableTitleList = {" Title", " (Re)set", " Obs", " Mean", " Std.Dev", " Min", " Max", "Unit"};
data.Add(tableTitleList.ToList());
for (int i = 0; i < 10; i++)
{
List<string> dataLine = new List<string>();
for (int j = 0; j < tableTitleList.Length; j++)
{
dataLine.Add(tableTitleList[j] + " " + (i + 1));
}
data.Add(dataLine);
}
return data;
}
}
}
unitedstates
JAVA
JAVA
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2023 Apryse Group NV
Authors: Apryse Software.
For more information, please contact iText Software at this address:
sales@itextpdf.com
*/
package com.itextpdf.samples.sandbox.tables;
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.properties.UnitValue;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.StringTokenizer;
public class UnitedStates {
public static final String DATA = "./src/main/resources/data/united_states.csv";
public static final String DEST = "./target/sandbox/tables/united_states.pdf";
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new UnitedStates().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc, PageSize.A4.rotate());
PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA);
PdfFont bold = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
Table table = new Table(UnitValue.createPercentArray(new float[] {14, 6, 12, 16, 12, 12, 12, 12, 6}));
try (BufferedReader br = new BufferedReader(new FileReader(DATA))) {
String line = br.readLine();
// The last argument defines which cell will be added: a header or the usual one
addRowToTable(table, line, bold, true);
while ((line = br.readLine()) != null) {
addRowToTable(table, line, font, false);
}
}
doc.add(table);
doc.close();
}
private static void addRowToTable(Table table, String line, PdfFont font, boolean isHeader) {
// Parses string line with specified delimiter
StringTokenizer tokenizer = new StringTokenizer(line, ";");
// Creates cells according to parsed csv line
while (tokenizer.hasMoreTokens()) {
Cell cell = new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font));
if (isHeader) {
table.addHeaderCell(cell);
} else {
table.addCell(cell);
}
}
}
}
C#
C#
using System;
using System.IO;
using iText.Commons.Utils;
using iText.IO.Font.Constants;
using iText.Kernel.Font;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
namespace iText.Samples.Sandbox.Tables
{
public class UnitedStates
{
public static readonly string DEST = "results/sandbox/tables/united_states.pdf";
public static readonly String DATA = "../../../resources/data/united_states.csv";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new UnitedStates().ManipulatePdf(DEST);
}
private void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc, PageSize.A4.Rotate());
PdfFont helvetica = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
PdfFont helveticaBold = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_BOLD);
Table table = new Table(UnitValue.CreatePercentArray(new float[] {14, 6, 12, 16, 12, 12, 12, 12, 6}));
using (StreamReader br = new StreamReader(DATA))
{
String line = br.ReadLine();
// The last argument defines which cell will be added: a header or the usual one
AddRowToTable(table, line, helveticaBold, true);
while ((line = br.ReadLine()) != null)
{
AddRowToTable(table, line, helvetica, false);
}
}
doc.Add(table);
doc.Close();
}
private static void AddRowToTable(Table table, String line, PdfFont font, bool isHeader)
{
// Parses string line with specified delimiter
StringTokenizer tokenizer = new StringTokenizer(line, ";");
// Creates cells according to parsed csv line
while (tokenizer.HasMoreTokens())
{
Cell cell = new Cell().Add(new Paragraph(tokenizer.NextToken()).SetFont(font));
if (isHeader)
{
table.AddHeaderCell(cell);
}
else
{
table.AddCell(cell);
}
}
}
}
}