我们有一个车辆“描述”,可以是从几个单词到几个段落的任何地方。它不需要超过一定的高度(如100px或其他)。完美的解决方案将允许文本框自动增长(即尽可能小,但能够长到最大高度)。似乎没有办法限制Paragraph
或Phrase
或其他任何内容的高度。我一直在搞ColumnText
,但我似乎无法弄清楚如何让ColumnText
进入文档的流程,所以描述之后的下一个元素低于它而不是顶部它的。我也见过ct.SetTextMatrix(xPos, yPos)
,但仍然没有给我一个最大高度框。我还没找到我需要的东西,或者iTextSharp中不存在它?
答案 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
(如果是这样)。由于我们能够将表格添加到文档中,因此它会进入页面的正常流程。
感谢评论员的指导!