Splitting tables
Examples that show what happens when a table doesn't fit the page:
splitting
JAVA
JAVA
/*
* Example written by Bruno Lowagie in answer to the following question:
* http://stackoverflow.com/questions/33286841/stop-itext-table-from-spliting-on-new-page
*/
package sandbox.tables;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
*
* @author Bruno Lowagie (iText Software)
*/
public class Splitting {
public static final String DEST = "results/tables/splitting.pdf";
public static void main(String[] args) throws IOException,
DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new Splitting().createPdf(DEST);
}
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
Paragraph p = new Paragraph("Test");
PdfPTable table = new PdfPTable(2);
for (int i = 1; i < 6; i++) {
table.addCell("key " + i);
table.addCell("value " + i);
}
for (int i = 0; i < 40; i++) {
document.add(p);
}
document.add(table);
for (int i = 0; i < 38; i++) {
document.add(p);
}
PdfPTable nesting = new PdfPTable(1);
PdfPCell cell = new PdfPCell(table);
cell.setBorder(PdfPCell.NO_BORDER);
nesting.addCell(cell);
document.add(nesting);
document.close();
}
}
splitting2
JAVA
JAVA
/*
* Example written by Bruno Lowagie in answer to the following question:
* http://stackoverflow.com/questions/33286841/stop-itext-table-from-spliting-on-new-page
*/
package sandbox.tables;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import sandbox.WrapToTest;
/**
*
* @author Bruno Lowagie (iText Software)
*/
@WrapToTest
public class Splitting2 {
public static final String DEST = "results/tables/splitting2.pdf";
public static void main(String[] args) throws IOException,
DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new Splitting2().createPdf(DEST);
}
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
Paragraph p = new Paragraph("Test");
PdfPTable table = new PdfPTable(2);
for (int i = 1; i < 6; i++) {
table.addCell("key " + i);
table.addCell("value " + i);
}
for (int i = 0; i < 40; i++) {
document.add(p);
}
document.add(table);
for (int i = 0; i < 38; i++) {
document.add(p);
}
table.setKeepTogether(true);
document.add(table);
document.close();
}
}
tablesplittest
JAVA
JAVA
/**
* Example written by Ramesh in the context of a question on SO:
* http://stackoverflow.com/questions/29345454/itext-avoid-row-splitting-in-table
*/
package sandbox.tables;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.draw.LineSeparator;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import sandbox.WrapToTest;
@WrapToTest
public class TableSplitTest {
public static final String DEST = "results/tables/split_test.pdf";
public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new TableSplitTest().createPdf(DEST);
}
public void createPdf(String dest) throws DocumentException, IOException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.setMargins(15, 15, 55, 35);
document.open();
String[] header = new String[] { "Header1", "Header2", "Header3",
"Header4", "Header5" };
String[] content = new String[] { "column 1", "column 2",
"some Text in column 3", "Test data ", "column 5" };
PdfPTable table = new PdfPTable(header.length);
table.setHeaderRows(1);
table.setWidths(new int[] { 3, 2, 4, 3, 2 });
table.setWidthPercentage(98);
table.setSpacingBefore(15);
table.setSplitLate(false);
for (String columnHeader : header) {
PdfPCell headerCell = new PdfPCell();
headerCell.addElement(new Phrase(columnHeader, FontFactory.getFont(FontFactory.HELVETICA, 10, Font.BOLD)));
headerCell.setHorizontalAlignment(Element.ALIGN_CENTER);
headerCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
headerCell.setBorderColor(BaseColor.LIGHT_GRAY);
headerCell.setPadding(8);
table.addCell(headerCell);
}
for (int i = 0; i < 15; i++) {
int j = 0;
for (String text : content) {
if (i == 13 && j == 3) {
text = "Test data \n Test data \n Test data";
}
j++;
PdfPCell cell = new PdfPCell();
cell.addElement(new Phrase(text, FontFactory.getFont(FontFactory.HELVETICA, 10, Font.NORMAL)));
cell.setBorderColor(BaseColor.LIGHT_GRAY);
cell.setPadding(5);
table.addCell(cell);
}
}
document.add(table);
document.add(new Phrase("\n"));
LineSeparator separator = new LineSeparator();
separator.setPercentage(98);
separator.setLineColor(BaseColor.LIGHT_GRAY);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);
for (int k = 0; k < 5; k++) {
Paragraph info = new Paragraph("Some title", FontFactory.getFont(FontFactory.HELVETICA, 10, Font.NORMAL));
info.setSpacingBefore(12f);
document.add(info);
table = new PdfPTable(header.length);
table.setHeaderRows(1);
table.setWidths(new int[] { 3, 2, 4, 3, 2 });
table.setWidthPercentage(98);
table.setSpacingBefore(15);
table.setSplitLate(false);
for (String columnHeader : header) {
PdfPCell headerCell = new PdfPCell();
headerCell.addElement(new Phrase(columnHeader, FontFactory.getFont(FontFactory.HELVETICA, 10, Font.BOLD)));
headerCell.setHorizontalAlignment(Element.ALIGN_CENTER);
headerCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
headerCell.setBorderColor(BaseColor.LIGHT_GRAY);
headerCell.setPadding(8);
table.addCell(headerCell);
}
for (String text : content) {
PdfPCell cell = new PdfPCell();
cell.addElement(new Phrase(text, FontFactory.getFont(FontFactory.HELVETICA, 10, Font.NORMAL)));
cell.setBorderColor(BaseColor.LIGHT_GRAY);
cell.setPadding(5);
table.addCell(cell);
}
document.add(table);
separator = new LineSeparator();
separator.setPercentage(98);
separator.setLineColor(BaseColor.LIGHT_GRAY);
linebreak = new Chunk(separator);
document.add(linebreak);
}
document.close();
}
}
splitrowatspecificrow
JAVA
JAVA
/**
* Example written by Bruno Lowagie in answer to:
* http://stackoverflow.com/questions/24665167/table-keeprowstogether-in-itext-5-5-1-doesnt-seem-to-work-correctly
*/
package sandbox.tables;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import sandbox.WrapToTest;
@WrapToTest
public class SplitRowAtSpecificRow {
public static final String DEST = "results/tables/split_at_row.pdf";
public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new SplitRowAtSpecificRow().createPdf(DEST);
}
public void createPdf(String dest) throws IOException, DocumentException {
PdfPTable table = new PdfPTable(1);
table.setTotalWidth(550);
table.setLockedWidth(true);
for (int i = 0; i < 10; i++) {
PdfPCell cell;
if (i == 9) {
cell = new PdfPCell(new Phrase("Two\nLines"));
}
else {
cell = new PdfPCell(new Phrase(Integer.toString(i)));
}
table.addCell(cell);
}
Document document = new Document(new Rectangle(612, 242));
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
table.setSplitLate(false);
table.setBreakPoints(8);
document.add(table);
document.close();
}
}
splitrowatendofpage
JAVA
JAVA
/**
* Example written by Bruno Lowagie in answer to:
* http://stackoverflow.com/questions/24616920/last-row-in-itext-table-extending-when-it-shouldnt
*/
package sandbox.tables;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import sandbox.WrapToTest;
@WrapToTest
public class SplitRowAtEndOfPage {
public static final String DEST = "results/tables/split_row_at_end_of_page.pdf";
public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new SplitRowAtEndOfPage().createPdf(DEST);
}
public void createPdf(String dest) throws IOException, DocumentException {
PdfPTable table = new PdfPTable(1);
table.setTotalWidth(550);
table.setLockedWidth(true);
for (int i = 0; i < 10; i++) {
PdfPCell cell;
if (i == 9) {
cell = new PdfPCell(new Phrase("Two\nLines"));
}
else {
cell = new PdfPCell(new Phrase(Integer.toString(i)));
}
table.addCell(cell);
}
Document document = new Document(new Rectangle(612, 242));
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
table.setSplitLate(false);
document.add(table);
document.close();
}
}