Reputation: 2931
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!*
Upvotes: 0
Views: 15265
Reputation: 2931
i have got answer
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!!!
Upvotes: 4