2013-08-29 19 views
1

這是工作和使用itextsharp在新窗口中打開PDF中的正確信息。 但第一列太寬,第二,三,四列太小。 我如何設計它?itextsharp中的gridview列寬pdf工作需要樣式

<form id="f1"> 
<asp:ImageButton BorderStyle="0" CssClass="submitbutton" runat="server" AlternateText="Get PDF" ID="LinkButton1" OnClick="btnGenerateReport" /> 

<asp:GridView BackColor="#FFFFFF" ID="gvEventCaf" runat="server" > 
</asp:GridView> 
</form> 

這裏是get PDF的onclick代碼隱藏:

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.Security; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 
using iTextSharp.text.html; 
using iTextSharp.text.html.simpleparser; 
using System.IO; 

protected void btnGenerateReport(object sender, EventArgs e) 
{ 
    MyPage tmpPage = new MyPage(); 
    HtmlForm form = new HtmlForm(); 
    form.Controls.Add(gvEventCaf); 
    tmpPage.Controls.Add(form); 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htmlWriter = new HtmlTextWriter(sw); 
    form.Controls[0].RenderControl(htmlWriter); 
    string htmlContent = sw.ToString(); 
    Document document = new Document(); 
    // step 2: 
    // we create a writer that listens to the document 
    // and directs a PDF-stream to a file 
    PdfWriter.GetInstance(document, new FileStream("c:\\users\\My\\Downloads\\Calendar.pdf", FileMode.Create)); 

    // step 3: we open the document 
    document.Open(); 

    // step 4: we add a paragraph to the document 
    //document.Add(new Paragraph(htmlContent.ToString())); 

    System.Xml.XmlTextReader _xmlr = new System.Xml.XmlTextReader(new StringReader(htmlContent)); 

    HtmlParser.Parse(document, _xmlr); 

    // step 5: we close the document 
    document.Close(); 

    ShowPdf("c:\\users\\Me\\Downloads\\Calendar.pdf"); 

} 

這裏的地方我看到了PDF:

private void ShowPdf(string s) 
{ 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.AddHeader("Content-Disposition", "inline;filename=" + s); 
    Response.ContentType = "application/pdf"; 
    Response.WriteFile(s); 
    Response.Flush(); 
    Response.Clear(); 
} 

這裏是Mypage.cs幫助文件我把在App_Code中:

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 

/// <summary> 
/// Summary description for MyPage 
/// </summary> 
public class MyPage : Page 
{ 
public override void VerifyRenderingInServerForm(Control control) 
{ 
    GridView grid = control as GridView; 
    if (grid != null && grid.ID == "gvEventCaf") 
     return; 
    else 
     base.VerifyRenderingInServerForm(control); 

} 
} 
+0

,如果你刪除的Asp.Net這將有助於標籤並向我們展示了與任何支持CSS一起呈現的實際(縮寫)HTML。 –

+0

我編輯了我的gridview,它仍然拉動正確的信息。完美的作品。無論我如何在頁面上設置樣式,它都不會複製到PDF中。我在想,任何CSS變化都必須在「btnGenerateReport」 – user2600293

+0

再次,沒有看到HTML和CSS,我們不能幫助太多。 –

回答

1

這是爲我工作的。我必須對所有與事件列表相同但獨立於事件列表的事件進行網格視圖,並且我對gridview進行了樣式設置,使其遠離沒有人能夠看到的網站頁面。

在對象eventlist.ascx的公共端:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="EventList.ascx.cs" Inherits="Objects_EventList" %> 
<asp:ListView runat="server" ID="lstvwEvents" OnItemDataBound="lstvwEvents_OnItemDataBound"> 
<LayoutTemplate> 
    <div class="eventtease" style="width: 249px;border-bottom: 1px solid #c0c06b;padding-right: 10px;padding-top: 10px;height: 300px;overflow: auto;"> 
     <asp:Literal runat="server" ID="itemPlaceholder" /> 
     <div style="clear: both;"></div> 
    </div> 
</LayoutTemplate> 
<ItemTemplate> 
    <h3 style="clear: both;border-top: 1px solid #c0c06b;padding-top: 10px;"><asp:Literal runat="server" ID="ltrlShortDate" /><br /><%# Eval("EventName").ToString().ToUpper() %><br />(<asp:Literal runat="server" ID="ltrlTimes" />)</h3> 
    <p class="eventdescription" style="font: normal normal normal 7.5pt/normal Arial, Sans-Serif;margin-top: 3px;"> 
     <%# Eval("Description") %> 

    </p> 
    <asp:HyperLink runat="server" ID="lnkLearnMore" Text="LEARN MORE" CssClass="learnmore" Visible="false" /> 
</ItemTemplate> 
</asp:ListView> 

<form id="f1"> 
<div> 
<asp:GridView ID="gvEventCaf" runat="server" 
    AutoGenerateColumns= "false" Font-Names= "Arial" AllowPaging="true" 
    OnPageIndexChanging= "OnPaging" CssClass="offframe" > 
    <Columns> 
    <asp:BoundField ItemStyle-Width = "50px" ItemStyle-Font-Size ="10px" DataField = "EventName" HeaderText = "Event Name" /> 
    <asp:BoundField ItemStyle-Width = "50px" ItemStyle-Font-Size ="10px" DataField = "EventTime" HeaderText = "Event Time"/> 
    <asp:BoundField ItemStyle-Width = "50px" ItemStyle-Font-Size ="10px" DataField = "EventDate" HeaderText = "Event Date"/> 
    <asp:BoundField ItemStyle-Width = "100px" ItemStyle-Font-Size ="10px" DataField = "Description" HeaderText = "Description"/> 
    </Columns> 
</asp:GridView> 
</div> 
<asp:Button ID="btnExportPDF" runat="server" Text="Download PDF" OnClick="btnExportPDF_Click" /> 
</form> 

而且在後面的代碼,eventlist.ascx.cs:

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.Security; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
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); 

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

protected void lstvwEvents_OnItemDataBound(Object sender, ListViewItemEventArgs e) 
{ 
    ListViewDataItem dataItem = (ListViewDataItem)e.Item; 
    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 
     var tempevent = dataItem.DataItem; 
     Type t = tempevent.GetType(); 

     DateTime tempdate; 

     if (DateTime.TryParse((t.GetProperty("EventDate").GetValue(tempevent, null)).ToString(), out tempdate)) 
     { 
      Literal ltrlShortDate = new Literal(); 
      ltrlShortDate = (Literal)e.Item.FindControl("ltrlShortDate"); 
      ltrlShortDate.Text = tempdate.ToString("MM/dd/yyyy"); 
     } 

     if (DateTime.TryParse((t.GetProperty("EventTime").GetValue(tempevent, null)).ToString(), out tempdate)) 
     { 
      Literal ltrlTimes = new Literal(); 
      ltrlTimes = (Literal)e.Item.FindControl("ltrlTimes"); 
      ltrlTimes.Text = tempdate.ToString("hh:mm tt"); 
     } 
    } 
} 

//Begin gridview for pdf 

protected void btnExportPDF_Click(object sender, EventArgs e) 
{ 
    gvEventCaf.AllowPaging = Convert.ToBoolean(rbPaging.SelectedItem.Value); 
    EventsDataContext edc = new EventsDataContext(); 
    var events = (from f in edc.tblEvents_Cafes 
        where f.EventDateTime >= DateTime.Now && f.VenueCity.Trim() == city.Trim() && (f.VenueName.Contains("Café") || f.VenueName.Contains("Cafe")) 
        orderby f.EventDateTime 
        select new 
        { 
         EventName = f.EventName, 
         EventDate = f.EventDate, 
         EventTime = f.EventTime, 
         VenueName = f.VenueName, 
         Description = edc.tblEvents_Cafe_Descriptions.OrderBy(d => d.Priority).Where(d => d.Keywords.ToLower() == f.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(); 

    //Create a table 
    iTextSharp.text.Table table = new iTextSharp.text.Table(gvEventCaf.Columns.Count); 
    table.Cellpadding = 5; 

    //Set the column widths 
    int[] widths = new int[gvEventCaf.Columns.Count]; 
    for (int x = 0; x < gvEventCaf.Columns.Count; x++) 
    { 
     widths[x] = (int)gvEventCaf.Columns[x].ItemStyle.Width.Value; 
     string cellText = Server.HtmlDecode(gvEventCaf.HeaderRow.Cells[x].Text); 
     iTextSharp.text.Cell cell = new iTextSharp.text.Cell(cellText); 
     cell.BackgroundColor = new Color(System.Drawing.ColorTranslator.FromHtml("#25925c")); 
     table.AddCell(cell); 
    } 
    table.SetWidths(widths); 

    //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(); 
    Paragraph chunk = new Paragraph("Calendar of Events for " + city + "Cafe"); 
    pdfDoc.Add(chunk); 
    pdfDoc.Add(table); 
    pdfDoc.Close(); 
    Response.ContentType = "application/pdf"; 
    Response.AddHeader("content-disposition", "attachment;filename=CafeCalendar.pdf"); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Write(pdfDoc); 
    Response.End(); 
} 

protected void OnPaging(object sender, GridViewPageEventArgs e) 
{ 
    gvEventCaf.PageIndex = e.NewPageIndex; 
    gvEventCaf.DataBind(); 
} 
}