【问题标题】:How to print a grid view using iTextSharp如何使用 iTextSharp 打印网格视图
【发布时间】:2012-05-05 16:02:18
【问题描述】:

如何在 asp.net 中使用 iTextSharp 打印 GridView 数据(全部)?我只需要提示而不是完整代码

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    试试这个:

     protected void ExportToPDF(GridView gvReport, bool LandScape)
    {
        int noOfColumns = 0, noOfRows = 0;
        DataTable tbl = null;
    
        if (gvReport.AutoGenerateColumns) 
        {
            tbl = gvReport.DataSource as DataTable; // Gets the DataSource of the GridView Control.
            noOfColumns = tbl.Columns.Count;
            noOfRows = tbl.Rows.Count;
        }
        else
        {
            noOfColumns = gvReport.Columns.Count;
            noOfRows = gvReport.Rows.Count;
        }
    
        float HeaderTextSize = 8;
        float ReportNameSize = 10;
        float ReportTextSize = 8;
        float ApplicationNameSize = 7;
    
        // Creates a PDF document
    
        Document document = null;
        if (LandScape == true)
        {
            // Sets the document to A4 size and rotates it so that the     orientation of the page is Landscape.
            document = new Document(PageSize.A4.Rotate(), 0, 0, 15, 5);
        }
        else
        {
            document = new Document(PageSize.A4, 0, 0, 15, 5);
        }
    
        // Creates a PdfPTable with column count of the table equal to no of columns of the gridview or gridview datasource.
        iTextSharp.text.pdf.PdfPTable mainTable = new iTextSharp.text.pdf.PdfPTable(noOfColumns);
    
        // Sets the first 4 rows of the table as the header rows which will be repeated in all the pages.
        mainTable.HeaderRows = 4;
    
        // Creates a PdfPTable with 2 columns to hold the header in the exported PDF.
        iTextSharp.text.pdf.PdfPTable headerTable = new   iTextSharp.text.pdf.PdfPTable(2);
    
        // Creates a phrase to hold the application name at the left hand side of the header.
        Phrase phApplicationName = new Phrase("Sample Application", FontFactory.GetFont("Arial", ApplicationNameSize, iTextSharp.text.Font.NORMAL));
    
        // Creates a PdfPCell which accepts a phrase as a parameter.
        PdfPCell clApplicationName = new PdfPCell(phApplicationName);
        // Sets the border of the cell to zero.
        clApplicationName.Border = PdfPCell.NO_BORDER;
        // Sets the Horizontal Alignment of the PdfPCell to left.
        clApplicationName.HorizontalAlignment = Element.ALIGN_LEFT;
    
        // Creates a phrase to show the current date at the right hand side of the header.
        Phrase phDate = new Phrase(DateTime.Now.Date.ToString("dd/MM/yyyy"), FontFactory.GetFont("Arial", ApplicationNameSize, iTextSharp.text.Font.NORMAL));
    
        // Creates a PdfPCell which accepts the date phrase as a parameter.
        PdfPCell clDate = new PdfPCell(phDate);
        // Sets the Horizontal Alignment of the PdfPCell to right.
        clDate.HorizontalAlignment = Element.ALIGN_RIGHT;
        // Sets the border of the cell to zero.
        clDate.Border = PdfPCell.NO_BORDER;
    
        // Adds the cell which holds the application name to the headerTable.
        headerTable.AddCell(clApplicationName);
        // Adds the cell which holds the date to the headerTable.
        headerTable.AddCell(clDate);
        // Sets the border of the headerTable to zero.
        headerTable.DefaultCell.Border = PdfPCell.NO_BORDER;
    
        // Creates a PdfPCell that accepts the headerTable as a parameter and then adds that cell to the main PdfPTable.
        PdfPCell cellHeader = new PdfPCell(headerTable);
        cellHeader.Border = PdfPCell.NO_BORDER;
        // Sets the column span of the header cell to noOfColumns.
        cellHeader.Colspan = noOfColumns;
        // Adds the above header cell to the table.
        mainTable.AddCell(cellHeader);
    
        // Creates a phrase which holds the file name.
        Phrase phHeader = new Phrase("Sample Export", FontFactory.GetFont("Arial", ReportNameSize, iTextSharp.text.Font.BOLD));
        PdfPCell clHeader = new PdfPCell(phHeader);
        clHeader.Colspan = noOfColumns;
        clHeader.Border = PdfPCell.NO_BORDER;
        clHeader.HorizontalAlignment = Element.ALIGN_CENTER;
        mainTable.AddCell(clHeader);
    
        // Creates a phrase for a new line.
        Phrase phSpace = new Phrase("\n");
        PdfPCell clSpace = new PdfPCell(phSpace);
        clSpace.Border = PdfPCell.NO_BORDER;
        clSpace.Colspan = noOfColumns;
        mainTable.AddCell(clSpace);
    
        // Sets the gridview column names as table headers.
        for (int i = 0; i < noOfColumns; i++)
        {
            Phrase ph = null;
    
            if (gvReport.AutoGenerateColumns)
            {
                ph = new Phrase(tbl.Columns[i].ColumnName, FontFactory.GetFont("Arial", HeaderTextSize, iTextSharp.text.Font.BOLD));
            }
            else
            {
                ph = new Phrase(gvReport.Columns[i].HeaderText, FontFactory.GetFont("Arial", HeaderTextSize, iTextSharp.text.Font.BOLD));                
            }
    
            mainTable.AddCell(ph);
        }
    
        // Reads the gridview rows and adds them to the mainTable
        for (int rowNo = 0; rowNo < noOfRows; rowNo++)
        {
            for (int columnNo = 0; columnNo < noOfColumns; columnNo++)
            {
                if (gvReport.AutoGenerateColumns)
                {
                    string s = gvReport.Rows[rowNo].Cells[columnNo].Text.Trim();
                    Phrase ph = new Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL));
                    mainTable.AddCell(ph);
                }
                else
                {
                    if (gvReport.Columns[columnNo] is TemplateField)
                    {
                        DataBoundLiteralControl lc = gvReport.Rows[rowNo].Cells[columnNo].Controls[0] as DataBoundLiteralControl;
                        string s = lc.Text.Trim();
                        Phrase ph = new Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL));
                        mainTable.AddCell(ph);
                    }
                    else
                    {
                        string s = gvReport.Rows[rowNo].Cells[columnNo].Text.Trim();
                        Phrase ph = new Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL));
                        mainTable.AddCell(ph);
                    }                    
                }
            }
    
            // Tells the mainTable to complete the row even if any cell is left incomplete.
            mainTable.CompleteRow();
        }
    
        // Gets the instance of the document created and writes it to the output stream of the Response object.
        PdfWriter.GetInstance(document, Response.OutputStream);
    
        // Creates a footer for the PDF document.
        HeaderFooter pdfFooter = new HeaderFooter(new Phrase(), true);
        pdfFooter.Alignment = Element.ALIGN_CENTER;
        pdfFooter.Border = iTextSharp.text.Rectangle.NO_BORDER;
    
        // Sets the document footer to pdfFooter.
        document.Footer = pdfFooter;
        // Opens the document.
        document.Open();
        // Adds the mainTable to the document.
        document.Add(mainTable);
        // Closes the document.
        document.Close();
    
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment; filename= SampleExport.pdf");
        Response.End();
    }
    

    取自here

    【讨论】:

    • 您应该复制答案中的相关代码,以防 'dotnetspider' 决定大吃一惊,从而留下死链接。
    • 在 DataView 示例中找到了不错的发现 - 我可能会自己为自己的项目掠夺一些代码。
    • 我也在寻找同样的东西:)
    • 非常感谢您的大力支持
    【解决方案2】:

    这是我今天使用的。抄自http://blog.codovations.com/2011/01/generating-pdf-from-datatable-using.html

    using System;
    using System.Web;
    using System.Data;
    
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    
    namespace yetanothercoder
    {
        /// <summary>
        /// Summary description for CreatePdf
        /// </summary>
        public class PDFExporter
        {
    
            private readonly DataTable dataTable;
            private readonly string fileName;
            private readonly bool timeStamp;
    
            public PDFExporter(DataTable dataTable, string fileName, bool timeStamp)
            {
                this.dataTable = dataTable;
                this.fileName = timeStamp ? String.Format("{0}-{1}", fileName, GetTimeStamp(DateTime.Now)) : fileName;
                this.timeStamp = timeStamp;
            }
    
            public void ExportPDF()
            {
                HttpResponse Response = HttpContext.Current.Response;
                Response.Clear();
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ".pdf");
    
                // step 1: creation of a document-object
                Document document = new Document(PageSize.A4, 10, 10, 90, 10);
    
                // step 2: we create a writer that listens to the document
                PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream);
    
                //set some header stuff
                document.AddTitle(fileName);
                document.AddSubject(String.Format("Table of {0}", fileName));
                document.AddCreator("www.yetanothercoder.com");
                document.AddAuthor("naveenj");
    
                // step 3: we open the document
                document.Open();
    
                // step 4: we add content to the document
                CreatePages(document);
    
                // step 5: we close the document
                document.Close();
            }
    
            private void CreatePages(Document document)
            {
                document.NewPage();
                document.Add(FormatPageHeaderPhrase(dataTable.TableName));
                PdfPTable pdfTable = new PdfPTable(dataTable.Columns.Count);
                pdfTable.DefaultCell.Padding = 3;
                pdfTable.WidthPercentage = 100; // percentage
                pdfTable.DefaultCell.BorderWidth = 2;
                pdfTable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
    
                foreach (DataColumn column in dataTable.Columns)
                {
                    pdfTable.AddCell(FormatHeaderPhrase(column.ColumnName));
                }
                pdfTable.HeaderRows = 1;  // this is the end of the table header
                pdfTable.DefaultCell.BorderWidth = 1;
    
                foreach (DataRow row in dataTable.Rows)
                {
                    foreach (object cell in row.ItemArray)
                    {
                        //assume toString produces valid output
                        pdfTable.AddCell(FormatPhrase(cell.ToString()));
                    }
                }
    
                document.Add(pdfTable);
            }
    
            private static Phrase FormatPageHeaderPhrase(string value)
            {
                return new Phrase(value, FontFactory.GetFont(FontFactory.TIMES, 10, Font.BOLD, new BaseColor(255, 0, 0)));
            }
    
            private static Phrase FormatHeaderPhrase(string value)
            {
                return new Phrase(value, FontFactory.GetFont(FontFactory.TIMES, 8, Font.UNDERLINE, new BaseColor(0, 0, 255)));
            }
    
            private Phrase FormatPhrase(string value)
            {
                return new Phrase(value, FontFactory.GetFont(FontFactory.TIMES, 8));
            }
    
            private string GetTimeStamp(DateTime value)
            {
                return value.ToString("yyyyMMddHHmmssffff");
            }
        }
    }
    

    【讨论】:

    • @amrswalha - 欢迎!不要忘记对对您有帮助的问题和答案进行投票:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多