1. 程式人生 > 其它 >c#操作資料庫匯出PDF格式

c#操作資料庫匯出PDF格式

首先:新增GET包:

iTextSharp

其次:新增名稱空間:

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

之後:操作sqlsever資料庫中的表,建立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;

    }