.NET Framework操作数据库导出PDF格式

首先:添加GET包:

iTextSharp

其次:添加命名空间:

using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;

之后:操作sql sever 数据库中的表,创建DataTable表格,DataTable中字段类型和数据库的名称的类型一致,把表中的内容循环到DataTable表格里

 var query = db.PlanInfo.Where(a => a.Isdeleted == 0);
        if (!IsAdmin())
        {
            query = query.Where(a => a.Dept == _User.DepartMentId);
        }

        if (this.txtUserName.Text.Trim() != "")
        {
            query = query.Where(a => a.Title.Contains(this.txtUserName.Text.Trim()));
        }
        query = query.OrderBy(a => a.Number);
        DataTable dt = new DataTable();
        dt.Columns.Add("Title", typeof(string));
        dt.Columns.Add("BeginTime", typeof(DateTime));
        dt.Columns.Add("EndTime", typeof(DateTime));
        dt.Columns.Add("stateName", typeof(string));
        dt.Columns.Add("ActiTypeName", typeof(string));
        dt.Columns.Add("SiteName", typeof(string));

        foreach (PlanInfo item in query)
        {
            DataRow row = dt.NewRow();
            row["Title"] = item.Title;
            row["BeginTime"] = item.BeginTime;
            row["EndTime"] = item.EndTime;
            row["stateName"] = item.stateName;
            row["ActiTypeName"] = item.ActiTypeName;
            row["SiteName"] = item.SiteName;
            dt.Rows.Add(row);
        }

        string path = Server.MapPath("~/Content/Templet/") + "计划审批模板.pdf";
        ConvertDataTableToPDF(dt, path, 16);


        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
            byte[] bytes = new byte[(int)fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("计划审批模板.pdf", System.Text.Encoding.UTF8));
            Response.BinaryWrite(bytes);
            Response.Flush();
            Response.End();
        }

之后:绘制PDF格式的表

public bool ConvertDataTableToPDF(DataTable Data, string PDFFile, float FontSize)
    {
        //定义页面的大小
        //Rectangle pageSize = new Rectangle(PoundsToPixels(2000), PoundsToPixels(3000));
        //Document document = new Document(pageSize);
        //默认页面大小
        Document document = new Document();
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(PDFFile, FileMode.Create));
        document.Open();
        //设置字体
        string path = Server.MapPath("~/typeface/") + "simsun.ttc";
        BaseFont bf = BaseFont.CreateFont("" + path + ",1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        iTextSharp.text.Font fontChinese = new iTextSharp.text.Font(bf, 12, iTextSharp.text.Font.NORMAL, new BaseColor(0, 0, 0));
        //BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        Font font = new Font(bf, FontSize);
        PdfPTable table = new PdfPTable(Data.Columns.Count);
        table.WidthPercentage = 100; // percentage
        table.DefaultCell.Padding = 1;
        table.DefaultCell.BorderWidth = 1;
        table.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
        //将datatable表头转换成PDFTable的表头
        foreach (DataColumn dc in Data.Columns)
        {
            if (dc.ColumnName.ToString() == "Title")
            {
                table.AddCell(new Phrase("标题", font));
            }
            if (dc.ColumnName.ToString() == "BeginTime")
            {
                table.AddCell(new Phrase("开始时间", font));
            }
            if (dc.ColumnName.ToString() == "EndTime")
            {
                table.AddCell(new Phrase("结束时间", font));
            }
            if (dc.ColumnName.ToString() == "stateName")
            {
                table.AddCell(new Phrase("状态", font));
            }
            if (dc.ColumnName.ToString() == "ActiTypeName")
            {
                table.AddCell(new Phrase("站所名称", font));
            }
            if (dc.ColumnName.ToString() == "SiteName")
            {
                table.AddCell(new Phrase("计划类型", font));
            }
        }
        //插入数据
        for (int i = 0; i < Data.Rows.Count; i++)
        {
            for (int j = 0; j < Data.Columns.Count; j++)
            {
                table.AddCell(new Phrase(Data.Rows[i][j].ToString(), font));
            }
        }
        document.Add(table);
        document.Close();
        writer.Close();
        return true;

    }

 

posted @ 2021-07-28 14:33  猴猴手记  阅读(265)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end