将DataGridView导出为PDF

public static class DataGridViewTOPdf
    {
        ///
        /// 转换GridView为PDF文档    ///
        /// GridView
        /// 目标PDF文件名字
        /// 字体所在路径
        /// 字体大小
        /// 返回调用是否成功
        public static void ExportTOPdf(DataGridView datagridview)
        {

            ///设置导出字体
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
            string FontPath = path + "\\simsun.ttc";
            int FontSize = 12;
            if (File.Exists(FontPath))
            {
                FontPath += ",1";
            }
            else
            {
                MessageBox.Show("无法导出,因为无法取得中文宋体字型。");
                return;
            }


            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,四周边距均为25
            Document document = new Document(PageSize.A4.Rotate(), 25, 25, 25, 25);

            //调用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("-- ", font), new Phrase(" --", font));
            //footer.Border = Rectangle.NO_BORDER;        // 不显示两条横线
            //footer.Alignment = Rectangle.UNDEFINED;  // 让页码居中
            //document.Footer = footer;

            //打开目标文档对象
            document.Open();

            int ColCount = 0;

            //根据数据表内容创建一个PDF格式的表
            for (int j = 0; j < datagridview.Columns.Count; j++)
            {
                if (datagridview.Columns[j].Visible == true)
                {
                    ColCount++;
                }
            }
            PdfPTable table = new PdfPTable(ColCount);

            // 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 = BaseColor.BLUE; 
            // 添加表头,每一页都有表头
            for (int j = 0; j < datagridview.Columns.Count; j++)
            {
                if (datagridview.Columns[j].Visible == true)
                {
                    table.AddCell(new Phrase(datagridview.Columns[j].HeaderText, font));
                }
            }

            // 告诉程序这行是表头,这样页数大于1时程序会自动为你加上表头。
            table.HeaderRows = 1;
            //
            // ---------------------------------------------------------------------------
            // 添加数据
            // ---------------------------------------------------------------------------
            // 设置表体背景色
            table.DefaultCell.BackgroundColor = BaseColor.WHITE;
            //遍历原gridview的数据行
            //写内容  
            for (int j = 0; j < datagridview.Rows.Count; j++)
            {
        
                for (int k = 0; k < datagridview.Columns.Count; k++)
                {
                    if (datagridview.Rows[j].Cells[k].Visible == true)
                    {
                        try
                        {
                            string value = "";
                            if (datagridview.Rows[j].Cells[k].Value != null)
                            {
                                value = datagridview.Rows[j].Cells[k].Value.ToString();
                               
                            }
                            table.AddCell(new Phrase(value, 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);
            }
        }
    }
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己写的C#常用类库,使用时请先添加引用:UsrCustomFun.dll、DevComponents.DotNetBar2.dll,压缩包内的其他文件请与UsrCustomFun.dll放置同一目录,然后在程序中引用命名空间:using UsrCustomFun;包括: 1.自定义MessageBox,消息内容与错误代码分开,使用了6个重载方式。调用方法例子: UserMessageBox.UsrShow("执行SQL查询出错!", "数据库错误", ec.Message.ToString()); 2.等待提示窗口,使用了3个重载方法。 打开:UserWaitBox.UsrShow("等待信息"); 关闭:UserWaitBox.UsrClose(); 3.打印DataGridView,使用了9个重载方式,可自定义标题与打印样式: DataGridViewPrint.PrintDgv(dataGridView); 4.DataTable导出为Excel,3个重载方式: DataTableToExcel.DtToExcel(DataTable); 5.DataTablePdf文件,6个重载方式: UsrExport.ExPdf(dataTable); 6.XML文件操作,可根据XML文件节点、路径来读取、修改、写入XML: UserXml.ReadXml(string XML的路径); UserXml.ReadXmlElement(string XML的路径,节点名称); UserXml.WriteXmlElement(XML路径,节点名称,内容); 7.数据库操作,目前有Access、SqlServer、Oracel (7.1)先配置数据库连接字符串: UsrCustomFun.SqlConn.SqlParameters下根据数据库类型返回一个数据库连接字符串。 (7.2)再执行数据库操作: (7.2.1)UsrCustomFun.SqlConn.SqlConnAccess下为Access的数据库操作,可根据SQL返回int型、string型、DataTable、DataReader、DataSet及无返回操作。 (7.2.2)UsrCustomFun.SqlConn.SqlConnOracle,操作类型同7.2.1 (7.2.3)UsrCustomFun.SqlConn.SqlConnSqlServer,操作类型同7.2.1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值