下载pdf后没有发布回发

时间:2016-06-24 05:54:29

标签: c# asp.net itext

我使用itextsharp开发了一个pdf文件。

Pdf生成工作正常。创建pdf后,它将被下载。

我的问题是当用户点击Generate PDF按钮时,Pdf会正确生成并下载,但不会发生回发。

我希望发生回发,因为我想在生成Pdf后清除所有字段时重置我的表单。

我该怎么做?

这是我的代码:

生成PDF的方法:

  public void GetPDF(string quote_num)
    {
        string url = FilesPath.Path_SaveFile + Session["empcd"].ToString() +"-Quotation.pdf";
        Document disclaimer = new Document(PageSize.A4, 2, 2, 10, 10);
        PdfWriter writer = PdfWriter.GetInstance(disclaimer, new FileStream(url, FileMode.Create));
        writer.PageEvent = new myPDFpgHandler(quote_num);
        disclaimer.SetMargins(70, 10, 60, 80);    
        disclaimer.Open();
        GenerateQuotPDF getpdf = new GenerateQuotPDF();
        disclaimer = getpdf.GetPDFparams(disclaimer,quote_num, Session["empcd"].ToString(),txt_contactperson.Text,txt_contact1.Text,txt_company.Text,txt_address.Text,ddl_gene_desc.SelectedItem.ToString(),ddl_canopy.SelectedItem.ToString(),ddl_gene_type.SelectedItem.ToString(),txt_rentalamount.Text,txt_hours.Text,txt_variable.Text,ddl_terms.SelectedItem.ToString(),txt_remarks.Text,txt_technical.Text,ddl_sign1.SelectedValue,ddl_sign2.SelectedValue,txt_designation.Text,DateTime.Now);
        disclaimer.Close();

        System.IO.FileInfo file = new System.IO.FileInfo(url);
        if (file.Exists)
        {
            WebClient client = new WebClient();
            Byte[] buffer = client.DownloadData(url);
            Response.AddHeader("content-disposition", "attachment; filename=" + Session["empcd"].ToString() + "-Quotation.pdf");
            Response.AddHeader("content-length", buffer.Length.ToString());
            Response.ContentType = "application/pdf";
            Response.BinaryWrite(buffer);
        }
    }

生成PDF按钮代码:

 protected void btn_submit_Click(object sender, EventArgs e)
    {
        if (IsValidQuotation())
        {
            string newQuotNum = rental_quotations.GetNewQuotNumber();
            rental_quotations.AddNewQuotation(newQuotNum, Session["empcd"].ToString(), ddl_gene_type.SelectedValue.ToString(), ddl_gene_desc.SelectedValue, ddl_canopy.SelectedValue, txt_company.Text, txt_address.Text, txt_contactperson.Text, txt_designation.Text, txt_contact1.Text, txt_contact2.Text, txt_rentalamount.Text, ddl_terms.SelectedValue, txt_hours.Text, txt_variable.Text, txt_remarks.Text,ddl_sign1.SelectedValue,ddl_sign2.SelectedValue,txt_technical.Text);
            GetPDF(newQuotNum);
            ClearAllFields();     //this is not working   

        }
    }

1 个答案:

答案 0 :(得分:1)

自创建文件以来正在发生回发。尝试给定的解决方案。你的GetPDF(string quote_num)函数执行两项任务,你应该分成两个函数。

  1. 创建pdf文档。
  2. 完成后下载pdf文件。
  3. 现在,在创建文档后,您应该清除控件,然后将文件作为响应发送。因此,请按以下步骤操作:

    创建pdf文件。

    public void CreatePDF(string quote_num)
    {
        string url = FilesPath.Path_SaveFile + Session["empcd"].ToString() +"-Quotation.pdf";
        Document disclaimer = new Document(PageSize.A4, 2, 2, 10, 10);
        PdfWriter writer = PdfWriter.GetInstance(disclaimer, new FileStream(url, FileMode.Create));
        writer.PageEvent = new myPDFpgHandler(quote_num);
        disclaimer.SetMargins(70, 10, 60, 80);    
        disclaimer.Open();
        GenerateQuotPDF getpdf = new GenerateQuotPDF();
        disclaimer = getpdf.GetPDFparams(disclaimer,quote_num, Session["empcd"].ToString(),txt_contactperson.Text,txt_contact1.Text,txt_company.Text,txt_address.Text,ddl_gene_desc.SelectedItem.ToString(),ddl_canopy.SelectedItem.ToString(),ddl_gene_type.SelectedItem.ToString(),txt_rentalamount.Text,txt_hours.Text,txt_variable.Text,ddl_terms.SelectedItem.ToString(),txt_remarks.Text,txt_technical.Text,ddl_sign1.SelectedValue,ddl_sign2.SelectedValue,txt_designation.Text,DateTime.Now);
        disclaimer.Close();
    }
    

    重置控件。

    ClearAllFields(); 
    

    将文件作为回复发送。

    public void SendPDF(string url)
    {
        System.IO.FileInfo file = new System.IO.FileInfo(url);
        if (file.Exists)
        {
            WebClient client = new WebClient();
            Byte[] buffer = client.DownloadData(url);
            Response.AddHeader("content-disposition", "attachment; filename=" + Session["empcd"].ToString() + "-Quotation.pdf");
            Response.AddHeader("content-length", buffer.Length.ToString());
            Response.ContentType = "application/pdf";
            Response.BinaryWrite(buffer);
            Response.End();
        }
    }
    

    请注意,我还添加了Response.End()来清除缓冲区。