ITextSharp整页高度布局

时间:2011-07-12 22:35:08

标签: c# .net itextsharp

我想用ITextSharp创建以下PDF布局:

enter image description here

我使用以下代码生成我的表:

Document document = new Document(PageSize.A4);
MemoryStream memoryStream = new MemoryStream();

PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);

document.Open();

PdfPCell cell;
PdfPTable table = new PdfPTable(2);

table.SetWidths(new float[] { 450, 100 });
table.WidthPercentage = 100;

cell = new PdfPCell(new Phrase("Item cod werwerwer"));
table.AddCell(cell);

cell = new PdfPCell(new Phrase("100"));
table.AddCell(cell);

cell = new PdfPCell(new Phrase(string.Empty));
table.AddCell(cell);

cell = new PdfPCell(new Phrase("100"));
table.AddCell(cell);

document.Add(table);

writer.CloseStream = false;
document.Close();
memoryStream.Position = 0;

return memoryStream.ToArray();

如何在不使用固定高度值的情况下强制表格覆盖整页高度?

2 个答案:

答案 0 :(得分:8)

您可以使用table.ExtendLastRow = true;

答案 1 :(得分:5)

表流,这正是他们所做的。如果你想改变高度,那么你将需要使用固定值。您可以通过尝试使用给定字体确定给定单元格中给定单元格中某些文本的高度来计算运行时的这些固定值。或者您可以将其修改为幻数,这就是下面的代码所做的。

顶部是魔法常数。当我们创建文档时,我们为所有边距指定0,以便我们填充整个页面。你可以改变这个,但你必须调整下面的计算。然后在第一行中,我们将单元格的MinimumHeight中的一个设置为页面的高度减去常量,而在第二行中,我们将单元格的一个高度设置为常量。

        //Fixed height of last cell
        float LAST_CELL_HEIGHT = 50f;

        //Create our document with zero margins
        Document document = new Document(PageSize.A4, 0, 0, 0, 0);
        FileStream fs = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "A4.pdf"), FileMode.Create, FileAccess.Write, FileShare.Read);

        PdfWriter writer = PdfWriter.GetInstance(document, fs);

        document.Open();

        PdfPCell cell;
        PdfPTable table = new PdfPTable(2);

        table.SetWidths(new float[] { 450, 100 });
        table.WidthPercentage = 100;

        cell = new PdfPCell(new Phrase("Item cod werwerwer"));
        //Set the first cell's height to the document's full height minus the last cell
        cell.MinimumHeight = document.PageSize.Height - LAST_CELL_HEIGHT;
        table.AddCell(cell);

        cell = new PdfPCell(new Phrase("100"));
        table.AddCell(cell);

        cell = new PdfPCell(new Phrase(string.Empty));
        //Set the last cell's height
        cell.MinimumHeight = LAST_CELL_HEIGHT;
        table.AddCell(cell);

        cell = new PdfPCell(new Phrase("100"));
        table.AddCell(cell);

        document.Add(table);

        writer.CloseStream = false;
        document.Close();
        fs.Close();