0

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を開くと、ユーザーはそれを印刷できるという提案

他の提案はありますか?

助けてくれてありがとう!*

4

1 に答える 1

4

私は答えを得ました

  1. まず、レポート ビューアーから PDF ファイルを作成し、サーバーのどこかに保存する必要があります。
  2. ファイルを一意の名前で保存する必要があります
  3. その後、ファイルストリームを使用して、サーバーパス上のバイトからpdfファイルに書き込みます
  4. クエリ文字列を使用してファイル名を新しいページにパスします
  5. Page_Loadで、クエリ文字列からpdfファイル名をqetして開きます

    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 ファイル名を qet し、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);
    }
 }

終わり !!!このコードが誰かに役立つことを願っています:)ありがとう!!!

于 2013-10-02T10:42:34.290 に答える