我想用html标签将一列(从数据源,使用GridView)显示为PDF。 我想要解码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标签,我不希望这样。
答案 0 :(得分:1)
您对HtmlDecode
方法做出了错误的假设。您假设此方法可以解码HTML,例如<p>This is <i>italic</i> and this is <b>bold</b>!</p>
类似于:
这是斜体,这是粗体!
但事实并非如此。请查看MSDN上的API documentation:
将已经过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对象,则需要一个加载项才能进行转换。请参阅Converting HTML to PDF using iText以了解如何执行此操作。