我想在PDF中显示带有HTML标签的一列(从数据源,使用GridView)。我希望将HTML解码,以便在PDF中不会打印字面的HTML标签。这是我的代码:
在gridview_rowdatabound事件中:
for (int i = 0; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)
{
for (int j = 0; j < 6; j++)
{
decodeHTML = HttpUtility.HtmlDecode(GridView1.Rows[i].Cells[j].Text);
GridView1.Rows[i].Cells[j].Text = decodeHTML;
}
}
}
然后将HTML解码的GridView添加到PDF单元格中:
Phrase cellText = new Phrase(GridView1.Rows[i].Cells[j].Text, baseFontNormal);
iTextSharp.text.pdf.PdfPCell cell = new PdfPCell(cellText);
if (j == 3) cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
table.AddCell(cell);
而不是以PDF格式显示数据,而是在HTML页面(以浏览器)为单位。但是,仅当我删除 gridview_rowdatabound 事件时,它才显示为PDF文件,但是数据将打印出字面的HTML标签,而我不想要此。
您对HtmlDecode
方法做出了错误的假设。您假设此方法可以解码HTML,例如 <p>This is <i>italic</i> and this is <b>bold</b>!</p>
进入:
这是斜体,这是 BOLD !
但事实并非如此。查看MSDN上的API文档:
转换了已将HTML编码用于HTTP传输的字符串转换为解码的字符串。
这是什么意思?
这意味着您可以使用HtmlDecode
转换这样的字符串:
<p>This is <i>italic</i> and this is <b>bold</b>!</p>
这样的字符串:
<p>This is <i>italic</i> and this is <b>bold</b>!</p>
HtmlDecode
方法 删除标签。它确保将字符串中的实体(类似&amp;)中的实体转换为可读内容。因此,您可以在PDF中看到标签是正常的。
当您具有HTML内容,并且要将其转换为ITEXT对象时,您需要一个附加组件才能进行转换。请参阅使用itext将HTML转换为PDF,以了解如何执行此操作。