问题
I did a code to create PDF and download it
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
}
Have any ways to open this PDF in a new tab or page ?
that's because i need to have button to direct print the report
the suggestion that to open the pdf in new tap then user can print it
any other suggestion !!?
Thanks for the help!*
回答1:
i have got answer
- Firstly You Need To create pdf file from report viewer and Save it somewhere on server
- you need to save the file in unique name
- After that use file stream to write from bytes to pdf file on your server path
- path the file name by using query string to new page
in Page_Load qet the pdf file name from query string and open it
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)); }
in Page_Load qet the pdf file name from query string and Open PDF File in Web Browser
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);
}
}
Done !!! hope this code helpful to someone :) Thanks!!!
来源:https://stackoverflow.com/questions/19115986/how-can-i-open-pdf-generated-by-report-viewer-in-new-tab