Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Set Height of PdfPTable in iTextSharp

i downloaded the last version of iTextSharp dll. I generated a PdfPTable object and i have to set it's height. Despite to set width of PdfPTable, im not able to set height of it. Some authors suggest to use 'setFixedHeight' method. But the last version of iTextSharp.dll has not method as 'setFixedHeight'. It's version is 5.5.2. How can i do it?

like image 395
mustafaalkan64 Avatar asked Aug 13 '14 06:08

mustafaalkan64


2 Answers

Setting a table's height doesn't make sense once you start thinking about it. Or, it makes sense but leaves many questions unanswered or unanswerable. For instance, if you set a two row table to a height of 500, does that mean that each cell get's 250 for a height? What if a large image gets put in the first row, should the table automatically respond by splitting 400/100? Then what about large content in both rows, should it squish those? Each of these scenarios produces different results that make knowing what a table will actually do unreliable. If you look at the HTML spec you'll see that they don't even allow setting a fixed height for tables.

However, there's a simple solution and that's just setting the fixed height of the cells themselves. As long as you aren't using new PdfPCell() you can just set DefaultCell.FixedHeight to whatever you want.

var t = new PdfPTable(2);
t.DefaultCell.FixedHeight = 100f;

t.AddCell("Hello");
t.AddCell("World");
t.AddCell("Hello");
t.AddCell("World");

doc.Add(t);

If you are manually creating cells then you need to set the FixedHeight on each:

var t = new PdfPTable(2);

for(var i=0;i<4;i++){
    var c = new PdfPCell(new Phrase("Hello"));
    c.FixedHeight = 75f;
    t.AddCell(c);
}

doc.Add(t);

However, if you want normal table-ness and must set a fixed height that chops things that don't fit you can also use a ColumnText. I wouldn't recommend this but you might have a case for it. The code below will only show six rows.

var ct = new ColumnText(writer.DirectContent);
ct.SetSimpleColumn(100, 100, 200, 200);

var t = new PdfPTable(2);
for(var i=0;i<100;i++){
    t.AddCell(i.ToString());
}
ct.AddElement(t);
ct.Go();
like image 176
Chris Haas Avatar answered Oct 23 '22 08:10

Chris Haas


you can use any one of following

cell.MinimumHeight = 20f;

or

cell.FixedHeight = 30f;

like image 6
malik saifullah Avatar answered Oct 23 '22 09:10

malik saifullah