5

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

4

2 回答 2

5

试试这个:

 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();
}

这里取

于 2012-05-05T16:09:15.013 回答
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");
        }
    }
}
于 2012-05-05T16:08:32.097 回答