繁体   English   中英

如何在新标签页中打开报告查看器生成的pdf?

[英]how can i open pdf generated by report viewer in new tab?

我编写了代码来创建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然后用户可以打印它

还有其他建议!?

谢谢您的帮助!*

我有答案

  1. 首先,您需要从报告查看器创建pdf文件并将其保存在服务器上的某个位置
  2. 您需要以唯一的名称保存文件
  3. 之后,使用文件流从字节写入服务器路径上的pdf文件
  4. 通过使用查询字符串将文件名设置为新页面的路径
  5. 在Page_Load中,从查询字符串中获取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中,从查询字符串中获取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);
    }
 }

做完!!! 希望这段代码对某人有用:)谢谢!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM