2012-05-05 29 views

答えて

4

からリッピングすることはこれで試してみてください:

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

+0

'dotnetspider'が死んでリンクを張ったままになることを決めた場合、あなたの答えに相対コードをコピーしてください。 –

+0

@クリス - それでは。 – coder

+0

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"); 
     } 
    } 
} 
+0

感謝から取りました。これは非常に良い方法です。 – amrswalha

+0

@amrswalha - ようこそ!あなたに役立つ質問と回答をupvoteするのを忘れないでください:) –

関連する問題