2013-08-28 82 views
0

我使用iTextSharp的生成動態事件列表的PDF文件。我所做的gridview的設置爲可見=假,但它是我的理解,我需要有一個GridView以出口爲PDF。iTextSharp的出口GridView控件PDF ASCX頁

我打開PDF格式,它是空白,就像從電網的信息是不正確複製。我可能會錯過與gridview數據綁定的步驟。

這裏的GridView控件:

<asp:GridView BackColor="Green" ID="gvEventCaf" runat="server" visible="false" > 
<Columns> 
     <asp:TemplateField HeaderText="EventName" 
      SortExpression="EventName" > 
      <ItemTemplate> 
       <%# Eval("EventName") %> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="EventDate" 
      SortExpression="EventDate"> 
      <ItemTemplate> 
       <%# Eval("EventDate") %> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="EventTime" 
      SortExpression="EventTime"> 
      <ItemTemplate> 
       <%# Eval("EventTime") %> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Description" 
      SortExpression="Description"> 
      <ItemTemplate> 
       <%# Eval("Description") %> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView>` 

這裏的隱藏代碼:

using System; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 
using iTextSharp.text.html; 
using iTextSharp.text.html.simpleparser; 
using System.IO; 

public partial class Objects_EventList : System.Web.UI.UserControl 
{ 

public string city; 
public int showcount; 

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    { 
     Load_Events(); 
    }; 
} 

protected void Load_Events() 
{ 
    EventsDataContext edc = new EventsDataContext(); 

    var events = (from e in edc.tblEvents_Cafes 
        where e.EventDateTime >= DateTime.Now && e.VenueCity.Trim() == city.Trim() && (e.VenueName.Contains("Café") || e.VenueName.Contains("Cafe")) 
        orderby e.EventDateTime 
        select new { 
         EventName = e.EventName, 
         EventDate = e.EventDate, 
         EventTime = e.EventTime, 
         Description = edc.tblEvents_Cafe_Descriptions.OrderBy(d => d.Priority).Where(d => d.Keywords.ToLower() == e.EventName.ToLower()).Select(d => d.Description).First(), // edc.tblEvents_Cafe_Descriptions.OrderBy(d => d.Priority).Where(d => d.Keywords.ToLower() == e.EventName.ToLower() || d.Keywords.ToLower().CompareTo(e.EventName.ToLower()) >= 0).Select(d => d.Description).First() 
        }).Take(showcount); 

    gvEventCaf.DataSource = events; 
    gvEventCaf.DataBind(); 
} 


protected void btnGenerateReport(object sender, EventArgs e) 
{ 
    gvEventCaf.DataBind(); 

//Create a table 

iTextSharp.text.Table table = new iTextSharp.text 

      .Table(gvEventCaf.Columns.Count); 

table.Cellpadding = 5; 





//Transfer rows from GridView to table 

for (int i = 0; i < gvEventCaf.Rows.Count; i++) 

{ 

    if (gvEventCaf.Rows[i].RowType == DataControlRowType.DataRow) 

    { 

     for (int j = 0; j < gvEventCaf.Columns.Count; j++) 

     { 

      string cellText = Server.HtmlDecode 

           (gvEventCaf.Rows[i].Cells[j].Text); 

      iTextSharp.text.Cell cell = new iTextSharp.text.Cell(cellText); 



      //Set Color of Alternating row 

      if (i % 2 != 0) 

      { 

       cell.BackgroundColor = new Color(System.Drawing 

            .ColorTranslator.FromHtml("#C2D69B")); 

      } 

      table.AddCell(cell); 

     } 

    } 

} 



//Create the PDF Document 

Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); 

PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 

pdfDoc.Open(); 

pdfDoc.Add(table); 

pdfDoc.Close(); 

Response.ContentType = "application/pdf"; 

Response.AddHeader("content-disposition", "attachment;" + 

           "filename=GridViewExport.pdf"); 

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Response.Write(pdfDoc); 

Response.End(); 

    } 
} 

回答

0

試試這套代碼獲取從HTML內容和使用iTextSharp的保存爲PDF格式。

gd.DataSource = GetTable(); 
     gd.DataBind(); 


     System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 

     System.Web.UI.HtmlTextWriter htmlWrite = 
     new HtmlTextWriter(stringWrite); 

     gd.RenderControl(htmlWrite); 

     String htmlText = "<div>" + stringWrite.ToString() +"</div>"; 

     using (FileStream fs = new FileStream(Request.PhysicalApplicationPath + "\\test.htm", FileMode.Create)) 
     { 
      using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8)) 
      { 
       w.WriteLine(htmlText); 
      } 
     } 

      String html = String.Empty; 
      using (StreamReader sr = new StreamReader(Request.PhysicalApplicationPath + "\\test.htm")) 
      { 
       html = sr.ReadToEnd(); 
      } 

      Document document = new Document(); 

      PdfWriter.GetInstance(document, new FileStream(Request.PhysicalApplicationPath + "\\outfile.pdf", FileMode.Create)); 
      document.Open(); 
      iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet(); 
      iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document); 
      hw.Parse(new StringReader(html)); 
      document.Close(); 

      Response.ClearContent(); 
      Response.ClearHeaders(); 
      Response.AddHeader("Content-Disposition", "inline;filename=outfile.pdf"); 
      Response.ContentType = "application/pdf"; 
      Response.WriteFile(Request.PhysicalApplicationPath + "\\outfile.pdf"); 
      Response.Flush(); 
      Response.Clear(); 




public static DataTable GetTable() 
    { 

     DataTable table = new DataTable(); 
     table.Columns.Add("Dosage", typeof(int)); 
     table.Columns.Add("Drug", typeof(string)); 
     table.Columns.Add("Patient", typeof(string)); 
     table.Columns.Add("Date", typeof(DateTime)); 


     table.Rows.Add(25, "Indocin", "David", DateTime.Now); 
     table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now); 
     table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now); 
     table.Rows.Add(21, "Combivent", "Janet", DateTime.Now); 
     table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now); 
     return table; 
    }