用HTML解码导出到PDF



我想在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转换这样的字符串:

&lt;p&gt;This is &lt;i&gt;italic&lt;/i&gt; and this is &lt;b&gt;bold&lt;/b&gt;!&lt;/p&gt;

这样的字符串:

<p>This is <i>italic</i> and this is <b>bold</b>!</p>

HtmlDecode方法 删除标签。它确保将字符串中的实体(类似&amp;)中的实体转换为可读内容。因此,您可以在PDF中看到标签是正常的。

当您具有HTML内容,并且要将其转换为ITEXT对象时,您需要一个附加组件才能进行转换。请参阅使用itext将HTML转换为PDF,以了解如何执行此操作。

最新更新