Alex Alex - 1 year ago 81
Java Question

iTextPdf: Changing Cell Widths Dynamically

I'm building a table for a pdf using iTextPdf. Each page will have between 9 and 15 columns on it, the exact number not known until runtime. iTextPDF is really good creating equally sized columns across the page width. But what I can't figure out is how to create columns with different widths.

I can't use a fixed column width, since I want to span the entire page width. Thus, when 9 columns are written, each column will necessarily be wider than when 12 or 15 columns are written. What is fixed is the relationship between these columns widths. To make up an example, I know that column A will always be 75% of the width of column B, which will always be 50% of the width of column C. I can determine this for every column.

Anyone have any ideas for how to divide up the page to properly size these columns? Here is some code that I am using that creates equally sized columns. I need something else towards the end near


to change the width of the column, but not to a fixed value. Thank you!

public static void newPDF() throws DocumentException, IOException {
PdfWriter writer;
Document document;
int cols = 9; //can be either 9, 12, or 15
document = new Document();
writer = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));;

public static PdfPTable createTable(int cols) {
PdfPTable table = new PdfPTable(cols);
PdfPCell cell;

for (int i = 0; i < cols; i++) {
ph = selector.process("some text");
cell = new PdfPCell(ph);
cell.setColspan(1); //repeated 9, 12, or 15 times
return table;

Answer Source

I found the answer.

float[] columnWidths = new float[] {10f, 20f, 30f, 10f};

This code apportions the horizontal space of the columns in relative proportion to the values inside the brackets (e.g. col A is 1/2 the size of col b and 1/3 the size of col C).

Good example of this here:

Thanks anyway!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download