我正在使用ITextSharp来创建PDF文档。作为创建文档的一部分,我必须在特定页面的窗口中呈现HTML块。我使用以下代码来呈现HTML。令人惊讶的是它没有呈现HTML。 我附上了HTML Here
public override Rectangle Draw(Rectangle curRectangle)
{
try
{
var column = new ColumnText(this.DocRenderer.PdfDocContentByte);
string css = "p {font-family:HELVETICA; font-style:normal; color:black; font-size:10px}"
+ " li {font-family:HELVETICA; font-style:normal; color:black;font-size:10px}";
foreach (var element in XMLWorkerHelper.ParseToElementList(FileContents of guide.html, css))
{
column.AddElement(element);
}
curRectangle = this.SimulateHeight(curRectangle, column);
column.SetSimpleColumn(curRectangle);
column.Go(false);
}
catch (Exception ex)
{
Logger.LogError(ex.Message, ex);
}
return curRectangle;
}
private Rectangle SimulateHeight(Rectangle curRectangle,ColumnText column)
{
float top = 15;
column.SetSimpleColumn(curRectangle.Left, curRectangle.Bottom, curRectangle.Right, top);
int status = column.Go(true);
top = column.YLine-1;
return new Rectangle(curRectangle.Left, curRectangle.Bottom, curRectangle.Right, top);
}
答案 0 :(得分:1)
即使它只是模拟,你的行
int status = column.Go(true);
如果所有内容都适合矩形,则会吞下添加到column
的所有复合内容。 (这样可以轻松地模拟将更多复合内容绘制到同一ColumnText
。)
因此,如果status
值为ColumnText.NO_MORE_TEXT
,则您必须再次添加,例如像这样:
private iTextSharp.text.Rectangle SimulateHeight(iTextSharp.text.Rectangle curRectangle, ColumnText column)
{
var compositeContent = new List<IElement>(column.CompositeElements);
float top = 15;
column.SetSimpleColumn(curRectangle.Left, curRectangle.Bottom, curRectangle.Right, top);
int status = column.Go(true);
if (ColumnText.NO_MORE_TEXT == status)
{
foreach (var element in compositeContent)
{
column.AddElement(element);
}
}
top = column.YLine - 1;
return new iTextSharp.text.Rectangle(curRectangle.Left, curRectangle.Bottom, curRectangle.Right, top);
}
实际上即使对于其他status
值,列表可能部分清空了适合的顶级元素。但是,在你的情况下,只有一个顶级元素div
,所以如果它不完全适合,它仍然存在。
另外,您使用位于页面实际底部附近的top
值,因此它实际上是底部y坐标。这样的命名很容易引起误解。