1. 程式人生 > >匯出DataGridView為PDF文件

匯出DataGridView為PDF文件

using System;
using System.Data;
using System.Configuration;
using System.Windows.Forms;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.Data.SqlClient;

[itextsharp.dll]


public partial class GrdvTOpdf
{
   

    #region ConvertGrdiViewToPDF() -> 換GridView為PDF文件

    ///
    /// 轉換GridView為PDF文件    ///
    /// GridView
    /// 目標PDF檔名字
    /// 字型所在路徑
    /// 字型大小
    /// 返回呼叫是否成功
    public  void ConvertGrdiViewToPDF(DataGridView datagridview)
    {
        ///設定匯出字型
        ///
        string FontPath ="C://WINDOWS//Fonts//simsun.ttc,1";
        int FontSize = 12;
        ///
        Boolean cc=false;
        string strFileName;
        SaveFileDialog savFile = new SaveFileDialog();
        savFile.Filter = "PDF檔案|.pdf";
        savFile.ShowDialog();
        if (savFile.FileName != "")
        {
            strFileName = savFile.FileName;
        }
        else
        {
            MessageBox.Show("終止匯出", "終止匯出", MessageBoxButtons.OK, MessageBoxIcon.Information);
            return;
        }

        //初始化一個目標文件類       
        //Document document = new Document();
        //豎排模式,大小為A4,四周邊距均為25
        Document document = new Document(PageSize.A4, 25, 25, 25, 25);
        //橫排模式,大小為A4,四周邊距均為50
        //Document doc = new Document(PageSize.A4.rotate(),50,50,50,50);

        //呼叫PDF的寫入方法流
        //注意FileMode-Create表示如果目標檔案不存在,則建立,如果已存在,則覆蓋。
        PdfWriter writer = PdfWriter.getInstance(document, new FileStream(strFileName, FileMode.Create));

        //建立PDF文件中的字型
        BaseFont baseFont = BaseFont.createFont(
          FontPath,
          BaseFont.IDENTITY_H,
          BaseFont.NOT_EMBEDDED);

        //根據字型路徑和字型大小屬性建立字型
        Font font = new Font(baseFont, FontSize);

        // 新增頁尾
        //HeaderFooter footer = new HeaderFooter(new Phrase(footertxt), true);
        HeaderFooter footer = new HeaderFooter(new Phrase("-- ", font), new Phrase(" --", font));
        footer.Border = Rectangle.NO_BORDER;        // 不顯示兩條橫線
        footer.Alignment = Rectangle.UNDEFINED;  // 讓頁碼居中
        document.Footer = footer;

        //開啟目標文件物件
        document.Open();

        //根據資料表內容建立一個PDF格式的表
        PdfPTable table = new PdfPTable(datagridview.Columns.Count);
        //iTextSharp.text.Table table = new iTextSharp.text.Table(datagridview.Columns.Count);

        // GridView的所有資料全輸出
        //datagridview.AllowPaging = false;

        // ---------------------------------------------------------------------------
        // 新增表頭
        // ---------------------------------------------------------------------------
        // 設定表頭背景色
        //table.DefaultCell.BackgroundColor = Color.GRAY;  // OK
        //table.DefaultCell.BackgroundColor = (iTextSharp.text.Color)System.Drawing.Color.FromName("#3399FF"); // NG
        //table.DefaultCell.BackgroundColor = iTextSharp.text.Color;

        //table.DefaultCell.BackgroundColor = System.Drawing.Color.DodgerBlue; 
        // 新增表頭,每一頁都有表頭
        for (int j = 0; j < datagridview.Columns.Count; j++)
        {
            table.addCell(new Phrase(datagridview[j, 0].Value.ToString(), font));
        }

        // 告訴程式這行是表頭,這樣頁數大於1時程式會自動為你加上表頭。
        table.HeaderRows = 1;
        //
        // ---------------------------------------------------------------------------
        // 新增資料
        // ---------------------------------------------------------------------------
        // 設定表體背景色
        //table.DefaultCell.BackgroundColor = Color
        //遍歷原gridview的資料行
        for (int i = 0; i < datagridview.Rows.Count; i++)
        {
            for (int j = 0; j < datagridview.Columns.Count; j++)
            {
             
                try
                {
                    table.addCell(new Phrase(datagridview[j,i].Value.ToString(), font));
                }
                catch (Exception e)
                {

                    MessageBox.Show(e.Message);
                    cc = true;
                }
                              

            }
        }

        //在目標文件中新增轉化後的表資料
        document.Add(table);

        //關閉目標檔案
        document.Close();

        //關閉寫入流
        writer.Close();

        // Dialog
        if (!cc)
        {
            MessageBox.Show("已生成PDF檔案。", "生成成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
     
    }

   
    #endregion


}