【发布时间】:2011-11-09 09:39:38
【问题描述】:
我目前正在尝试将 gridview 导出为 pdf 文件。
我的代码是:
public void GvExportPDF(GridView gvListing, string fileName,int TotalColumns)
{
http.Response.ContentType = "application/pdf";
http.Response.AddHeader("content-disposition", "attachment;filename= " + fileName + ".pdf");
http.Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
gvListing.AllowPaging = false;
PdfPTable table = new PdfPTable(TotalColumns);
foreach (GridViewRow rows in gvListing.Rows)
{
if (rows.RowType == DataControlRowType.Header)
{
for (int i = 0; i < rows.Cells.Count; i++)
{
PdfPCell cell = new PdfPCell();
cell.Phrase = new Phrase(getCellText(rows.Cells[i]));
table.AddCell(cell);
}
}
else if (rows.RowType == DataControlRowType.DataRow)
{
System.Web.UI.WebControls.Image Image1 = (System.Web.UI.WebControls.Image)rows.FindControl("Image1");
string url = Image1.ImageUrl;
Image1.Visible = false;
iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(new Uri(url));
jpg.ScaleToFit(8f, 10f);
jpg.Border = Rectangle.NO_BORDER;
for (int i = 0; i < rows.Cells.Count; i++)
{
if (i == 0)
table.AddCell(jpg);
else
{
PdfPCell cell = new PdfPCell(new Phrase(HttpContext.Current.Server.HtmlDecode(getCellText(rows.Cells[i]))));
table.AddCell(cell);
}
}
}
}
//gvListing.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, http.Response.OutputStream);
try
{
pdfDoc.Open();
pdfDoc.Add(table);
}
catch (DocumentException dex)
{
//http.Response.Write(dex.Message);
System.Diagnostics.Debug.WriteLine(dex.Message);
}
catch (IOException ioex)
{
//http.Response.Write(ioex.Message);
System.Diagnostics.Debug.WriteLine(ioex.Message);
}
catch (Exception ex)
{
//http.Response.Write(ex.Message);
System.Diagnostics.Debug.WriteLine(ex.Message);
}
finally
{
pdfDoc.Close();
//http.Response.Write(StyleOfExportTable());
http.Response.Output.Write(pdfDoc);
http.Response.End();
}
}
private string getCellText(TableCell cell)
{
StringBuilder sb = new StringBuilder(cell.Text);
foreach (Control c in cell.Controls)
{
if (c.Visible)
{
string controlText = getTextProperty(c);
if (controlText != null)
{
if (sb.Length > 0) sb.Append(" ");
sb.Append(controlText);
}
}
}
return sb.ToString();
}
private string getTextProperty(object o)
{
PropertyInfo propertyInfo = o.GetType().GetProperty("Text");
if (propertyInfo != null)
{
MethodInfo getMethod = propertyInfo.GetGetMethod();
if (getMethod != null)
{
return (string)getMethod.Invoke(o, null);
}
}
return string.Empty;
}
它可以导出pdf,可以导出我想要的总列,但除了图像,其他单元格只显示html代码<table><tr><td>text</td></tr></table>。
这是什么问题,我该如何解决?
【问题讨论】:
-
您是在使用
sw、hw、sr和htmlparser还是其他的? -
是的,克里斯·哈斯。我正在使用 htmlparser 和 stringbuilder
标签: asp.net c#-4.0 gridview itextsharp cell