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>");
}
}