如何在新选项卡中打开报表查看器生成的PDF
本文关键字:报表 PDF 新选项 选项 | 更新日期: 2023-09-27 18:33:36
我做了一个代码来创建PDF并下载它
protected void create_pdf_Click(object sender, EventArgs e)
{
Warning[] warnings;
string[] streamIds;
string mimeType = string.Empty;
string encoding = string.Empty;
string extension = string.Empty;
string devinfo = "<DeviceInfo><ColorDepth>32</ColorDepth><DpiX>350</DpiX><DpiY>350</DpiY><OutputFormat>PDF</OutputFormat>" +
" <PageWidth>8.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>" +
" <MarginTop>0.5in</MarginTop>" +
" <MarginLeft>0.5in</MarginLeft>" +
" <MarginRight>0in</MarginRight>" +
" <MarginBottom>0in</MarginBottom>" +
"</DeviceInfo>";
// Setup the report viewer object and get the array of bytes
ReportViewer viewer = new ReportViewer();
viewer.ProcessingMode = ProcessingMode.Local;
viewer.LocalReport.ReportPath = Server.MapPath("~/Installments_Report.rdlc");
DataView dv = new DataView();
DataTable dt = new DataTable();
dv = (System.Data.DataView)SqlDataSource1.Select(System.Web.UI.DataSourceSelectArguments.Empty);
dt = dv.ToTable();
viewer.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
byte[] bytes = viewer.LocalReport.Render("PDF", devinfo, out mimeType, out encoding, out extension, out streamIds, out warnings);
// Now that you have all the bytes representing the PDF report, buffer it and send it to the client.
Response.Buffer = true;
Response.Clear();
Response.ContentType = mimeType;
Response.AddHeader("content-disposition", "attachment; filename=" + "Installments" + "List" + "." + extension);
Response.BinaryWrite(bytes); // create the file
Response.Flush(); // send it to the client to download
}
有什么方法可以在新标签页或页面中打开此 PDF 吗?
那是因为我需要按钮来直接打印报告
建议在新点击中打开PDF,然后用户可以打印它
任何其他建议!?
感谢您的帮助!
我得到了答案
- 首先,您需要从报告查看器创建pdf文件并保存在服务器上的某个地方
- 您需要以唯一的名称保存文件
- 之后使用文件流从字节写入服务器路径上的pdf文件
- 使用查询字符串将文件名路径路径到新页
-
在Page_Load qet 查询字符串中的 pdf 文件名并将其打开
protected void Print_Click(object sender, EventArgs e) { Warning[] warnings; string[] streamIds; string mimeType = string.Empty; string encoding = string.Empty; string extension = string.Empty; string devinfo = "<DeviceInfo><ColorDepth>32</ColorDepth><DpiX>350</DpiX><DpiY>350</DpiY><OutputFormat>PDF</OutputFormat>" + " <PageWidth>8.5in</PageWidth>" + " <PageHeight>11in</PageHeight>" + " <MarginTop>0.5in</MarginTop>" + " <MarginLeft>0.5in</MarginLeft>" + " <MarginRight>0in</MarginRight>" + " <MarginBottom>0in</MarginBottom>" + "</DeviceInfo>"; // Setup the report viewer object and get the array of bytes ReportViewer viewer = new ReportViewer(); viewer.ProcessingMode = ProcessingMode.Local; viewer.LocalReport.ReportPath = Server.MapPath("~/Installments_Report.rdlc"); DataView dv = new DataView(); DataTable dt = new DataTable(); dv = (System.Data.DataView)SqlDataSource1.Select(System.Web.UI.DataSourceSelectArguments.Empty); dt = dv.ToTable(); viewer.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt)); byte[] bytes = viewer.LocalReport.Render("PDF", devinfo, out mimeType, out encoding, out extension, out streamIds, out warnings); // Now that you have all the bytes representing the PDF report, buffer it and send it to the client. string path =Server.MapPath("Print_Files") ; Random rnd = new Random(); int month = rnd.Next(1, 13); // creates a number between 1 and 12 int dice = rnd.Next(1, 7); // creates a number between 1 and 6 int card = rnd.Next(9); // creates a number between 0 and 51 string file_name = "Installments" + "List" + month+dice+card+".pdf"; //save the file in unique name //3. After that use file stream to write from bytes to pdf file on your server path FileStream file = new FileStream(path + "/" + file_name, FileMode.OpenOrCreate, FileAccess.ReadWrite); file.Write(bytes, 0, bytes.Length); file.Dispose(); //4.path the file name by using query string to new page Response.Write(string.Format("<script>window.open('{0}','_blank');</script>", "Print.aspx?file="+file_name)); }
在Page_Load qet 查询字符串中的 PDF 文件名和在 Web 浏览器中打开 PDF 文件
protected void Page_Load(object sender, EventArgs e)
{
string file_name = Request.QueryString["file"];
string path = Server.MapPath("Print_Files/"+file_name);
// Open PDF File in Web Browser
WebClient client = new WebClient();
Byte[] buffer = client.DownloadData(path);
if (buffer != null)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", buffer.Length.ToString());
Response.BinaryWrite(buffer);
}
}
做!!!希望这段代码对某人有所帮助:)谢谢!!!