C# 将面板内容导出为PDF不起作用
我想导出pdf格式的面板内容,但我得到了错误,在面板中我有表格和Gridview ASPX页面:C# 将面板内容导出为PDF不起作用,c#,asp.net,c#-4.0,itextsharp,xmlworker,C#,Asp.net,C# 4.0,Itextsharp,Xmlworker,我想导出pdf格式的面板内容,但我得到了错误,在面板中我有表格和Gridview ASPX页面: <asp:Panel ID = "pnl_export" runat = "server" > <table> <tr> <td> <asp:Label ID="rptname"
<asp:Panel ID = "pnl_export" runat = "server" >
<table>
<tr>
<td>
<asp:Label ID="rptname" runat="server" Text=""></asp:Label>
</td>
<td>
<asp:Label ID="lbid" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lbexp" runat="server" Text="Report Exported On : "></asp:Label>
</td>
<td>
<asp:Label ID="lbdate" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lfrm" runat="server" Text="From : "></asp:Label>
</td>
<td>
<asp:Label ID="fdate" runat="server"></asp:Label>
</td>
<td>
<asp:Label ID="lto" runat="server" Text="To : "></asp:Label>
</td>
<td>
<asp:Label ID="tdate" runat="server"></asp:Label>
</td>
</tr>
</table>
<asp:GridView ID="GridView1" runat="server" Width="63%" align="Center" PageSize="20"
AllowPaging="true" OnRowDataBound="GridView1_RowDataBound" OnPageIndexChanging="GridView1_PageIndexChanging">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<PagerSettings Mode="NextPreviousFirstLast" FirstPageText="First" LastPageText="Last"
NextPageText="Next" PreviousPageText="Prev" Position="TopAndBottom" />
</asp:GridView>
</asp:Panel>
给我一个错误是行不通的
Error : Unable to cast object of type 'iTextSharp.text.html.simpleparser.TableWrapper' to type 'iTextSharp.text.ITextElementArray'.
HTML内容:
<div id="pnl_export">
<table>
<tr>
<td>
<span id="rptname">Agent Report For AgentID : </span>
</td>
<td>
<span id="lbid">RSBOM0400986</span>
</td>
</tr>
<tr>
<td>
<span id="lbexp">Report Exported On : </span>
</td>
<td>
<span id="lbdate">10:01:34 AM</span>
</td>
</tr>
<tr>
<td>
<span id="lfrm">From : </span>
</td>
<td>
<span id="fdate">25/11/2014</span>
</td>
<td>
<span id="lto">To : </span>
</td>
<td>
<span id="tdate">28/11/2014</span>
</td>
</tr>
<div>
<table cellspacing="0" rules="all" align="Center" border="1" id="GridView1" style="width:63%;border-collapse:collapse;">
<tr style="color:White;background-color:#5D7B9D;font-weight:bold;">
<th scope="col">Sr.No</th><th scope="col">Sales Person</th><th scope="col">Remark</th><th scope="col">Date Visited</th>
</tr><tr class="Textsmall" align="center" valign="middle" style="color:#333333;background-color:#F7F6F3;border-style:None;">
<td>1</td><td>Manish Goswami-700145</td><td>fhvhvhffffffftt</td><td>26-Nov-14 5:53:49 PM</td>
</tr><tr class="Textsmall" align="center" valign="middle" style="color:#284775;background-color:White;border-style:None;">
<td>2</td><td>Manish Goswami-700145</td><td>remark km from my name of the way to</td><td>26-Nov-14 5:59:23 PM</td>
</tr>
</table>
</div>
</table>
AgentID的代理报告:
RSBOM0400986
报告导出日期:
上午10:01:34
发件人:
25/11/2014
致:
28/11/2014
诺萨莱斯高级职员访问日期
2014年11月16日下午5:53:49
2从我的名字到2014年11月26日下午5:59:23,马尼什戈斯瓦米-700145公里
请帮助我解决此错误。请提前感谢。试试这种方法
protected void pdfExport_Click(object sender, EventArgs e)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=AgentReport.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
pnl_export.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
}
谢谢@Hiral它工作了,你能告诉我哪里错了吗。@ManishGoswami首先你得到了文档的实例,然后打开文档:)是的,我得到了@Hiral。。但现在我在导出后无法在pdf中看到gridview标头。今天再次收到相同的错误,无法将类型为“iTextSharp.text.html.simpleparser.TableWrapper”的对象强制转换为类型为“iTextSharp.text.ItextermentArray”。您好,我使用的代码与导出后相同,但在打开pdf文件时出现错误“Adobe reader无法打开name.pdf,因为它不是受支持的文件类型,或者文件已损坏“。您发布的HTML包含无效的嵌套标记。启动
div
,然后打开表
,关闭div
,然后关闭表
。我建议先解决这个问题。其次,您的错误消息应该显示了几十个相关的答案,所有答案都告诉您,因为您正在使用的产品(HTMLWorker
)不再得到维护或支持。第三,删除行Response.Write(pdfDoc)代码>,它不会做您认为它会做的事情,并最终导致输出损坏。Chris Haas它的工作方式是@HiralNayak建议的。谢谢,我会按照您所说的尝试使用,并会回复您:)
protected void pdfExport_Click(object sender, EventArgs e)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=AgentReport.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
pnl_export.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
}