把报表导出PDF格式

来源:互联网 发布:淘宝网店金牌客服实战 编辑:程序博客网 时间:2024/05/05 21:25

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using Microsoft.Reporting.WebForms;
/// <summary>
/// OutToPDF 的摘要说明
/// </summary>
public class OutToPDF : System.Web.UI.Page
{
    public OutToPDF()
    {
    }
    //
    // TODO: 在此处添加构造函数逻辑
    //

   private static bool SaveToServer(LocalReport lr, string FileName, out string strErr)
    {
        strErr = "";
        try
        {
            string deviceInfo =
                     "<DeviceInfo>" +
                     "  <OutputFormat>PDF</OutputFormat>" +
                     "  <SimplePageHeaders>True</SimplePageHeaders>" +
                     "</DeviceInfo>";

            string mimeType, encoding, extension;
            string[] streams;
            Warning[] warnings;

            byte[] bytes = lr.Render(
                "PDF",
                deviceInfo,
                out mimeType,
                out encoding,
                out extension,
                out streams,
                out warnings);

            using (FileStream fs = new FileStream(FileName, FileMode.Create))
            {
                fs.Write(bytes, 0, bytes.Length);
                fs.Close();
            }
        }
        catch (Exception e)
        {
            strErr = e.Message;
            return false;
        }
        return true;
    }

    /// <summary>
    /// 要保存到客戶端的文件
    /// </summary>
    /// <param name="fileName"></param>
    public static bool SaveToClient(LocalReport lr, string FileName, out string strErr)
    {
        strErr = "";
        bool isTrue = SaveToServer(lr, FileName, out strErr);
        if (!isTrue)
        {
            return false;
        }
        else
        {
            try
            {
                FileInfo fi = new FileInfo(FileName);
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.ClearHeaders();
                HttpContext.Current.Response.Buffer = false;
                HttpContext.Current.Response.ContentType = "application/pdf";
                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fi.FullName, System.Text.Encoding.UTF8));
                HttpContext.Current.Response.AppendHeader("Content-Length", fi.Length.ToString());
                HttpContext.Current.Response.WriteFile(fi.FullName);
                HttpContext.Current.Response.Flush();
                fi.Delete();
                HttpContext.Current.Response.End();
            }
            catch (Exception e)
            {
                strErr = e.Message;
                return false;
            }
            return true;
        }
    }
}

 

//*****************************************使用方法*******************************

    /// <summary>
    /// 導出報表
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void BtnToPDF_Click(object sender, EventArgs e)
    {
        OutToPDFMethod();
    }

    private void OutToPDFMethod()
    {
        string strErr;
        LocalReport lr = this.ContainerChargeReportViewer.LocalReport;
        string myFileName = Request.MapPath(".") + "//渡櫃報表.pdf";
        bool isTrue = OutToPDF.SaveToClient(lr, myFileName, out strErr);
        if (!isTrue)
        {
            this.RegisterStartupScript("", "<script>alert(/"" + strErr + "/");</script>");
        }
    }

原创粉丝点击