如何在iTextSharp中生成最大高度的文本框(自动增长?)

时间:2013-11-20 23:34:25

标签: c# position size itextsharp

我们有一个车辆“描述”,可以是从几个单词到几个段落的任何地方。它不需要超过一定的高度(如100px或其他)。完美的解决方案将允许文本框自动增长(即尽可能小,但能够长到最大高度)。似乎没有办法限制ParagraphPhrase或其他任何内容的高度。我一直在搞ColumnText,但我似乎无法弄清楚如何让ColumnText进入文档的流程,所以描述之后的下一个元素低于它而不是顶部它的。我也见过ct.SetTextMatrix(xPos, yPos),但仍然没有给我一个最大高度框。我还没找到我需要的东西,或者iTextSharp中不存在它?

1 个答案:

答案 0 :(得分:1)

非常感谢,@ Chris Haas!我的解决方案最终由他发布的the link找到。

首先,在页面顶部,我们进行表高度计算:

PdfPTable tempTable = new PdfPTable(1);
tempTable.SetTotalWidth(new float[] { 540 }); //540 is width of PageSize.LETTER minus 36*2 for margins
string itemDescription = item.Description;
tempTable.AddCell(itemDescription);
float descriptionTableHeight = CalculatePdfPTableHeight(tempTable);

然后,实际生成PDF的代码:

using (MemoryStream ms = new MemoryStream())
{
    using (Document document = new Document(PageSize.LETTER))
    {
        using (PdfWriter writer = PdfWriter.GetInstance(document, ms))
        {
            document.Open();

            //document properties
            float margin = 36f;
            document.SetMargins(margin, margin, margin, margin);

            document.NewPage();

            //description
            customFont = FontFactory.GetFont("Helvetica", 10);
            Phrase description = new Phrase(itemDescription, customFont);

            table = new PdfPTable(1);
            table.WidthPercentage = 100;
            cell = new PdfPCell(description);
            cell.Border = 0;
            float maxHeight = 98f;
            if (descriptionTableHeight > maxHeight)
                cell.FixedHeight = maxHeight;
            table.AddCell(cell);
            document.Add(table);
        }
    }
}

因为我们现在有了表的高度,我们可以检查它是否大于最大值并设置单元格的FixedHeight(如果是这样)。由于我们能够将表格添加到文档中,因此它会进入页面的正常流程。

感谢评论员的指导!