回来后的PDF下载后不存在的 [英] Post Back not occuring after pdf is downloaded

查看:113
本文介绍了回来后的PDF下载后不存在的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经开发使用iTextSharp的PDF文件。



PDF生成工作正常。在PDF创建后它被下载。



在上生成PDF按钮,用户点击,已生成并下载正确的PDF,但回发不会出现我的问题是,



我要做个发生回发,因为我想在生成后的PDF是清除所有字段重置我的表单。



我怎样才能做到这一点。



下面是我的代码:



方法生成PDF:

 公共无效GetPDF(字符串quote_num)
{
字符串URL = FilesPath.Path_SaveFile +会话[empcd ]的ToString()+ - Quotation.pdf;
稿件声明=新的文件(PageSize.A4,2,2,10,10);
PdfWriter作家= PdfWriter.GetInstance(免责声明,新的FileStream(URL,FileMode.Create));
writer.PageEvent =新myPDFpgHandler(quote_num);
disclaimer.SetMargins(70,10,60,80);
disclaimer.Open();
GenerateQuotPDF getpdf =新GenerateQuotPDF();
免责声明= getpdf.GetPDFparams(免责声明,quote_num,会话[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文件=新System.IO.FileInfo(URL);
如果(file.Exists)
{
WebClient的客户端=新的WebClient();
字节[]缓冲= client.DownloadData(URL);
Response.AddHeader(内容处置,附件;文件名=+会话[empcd]的ToString()+-Quotation.pdf);
Response.AddHeader(内容长度,buffer.Length.ToString());
Response.ContentType =应用程序/ PDF
Response.BinaryWrite(缓冲液);
}
}

生成PDF按钮代码:

 保护无效btn_submit_Click(对象发件人,EventArgs五)
{
如果(IsValidQuotation())
{
串newQuotNum = rental_quotations.GetNewQuotNumber();
rental_quotations.AddNewQuotation(newQuotNum,会话[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 。文本,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(); //这是行不通的

}
}


解决方案

回发发生,因为正在创建的文件。尝试给出的解决方案。你的 GetPDF(字符串quote_num)函数是做你应该分成两个功能的两个任务。




  1. 创建 PDF 文件。

  2. 下载 PDF 文件它完成了。



现在,您已经创建了文件后,应清除控件,然后发送文件作为响应。因此,做如下:



创建 PDF 文件

 公共无效CreatePDF(字符串quote_num)
{
字符串URL = FilesPath.Path_SaveFile +会话[empcd]。的ToString ()+ - Quotation.pdf;
稿件声明=新的文件(PageSize.A4,2,2,10,10);
PdfWriter作家= PdfWriter.GetInstance(免责声明,新的FileStream(URL,FileMode.Create));
writer.PageEvent =新myPDFpgHandler(quote_num);
disclaimer.SetMargins(70,10,60,80);
disclaimer.Open();
GenerateQuotPDF getpdf =新GenerateQuotPDF();
免责声明= getpdf.GetPDFparams(免责声明,quote_num,会话[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(); 

发送的文件作为响应。



 公共无效SendPDF(字符串URL)
{
System.IO.FileInfo文件=新System.IO.FileInfo(URL);
如果(file.Exists)
{
WebClient的客户端=新的WebClient();
字节[]缓冲= client.DownloadData(URL);
Response.AddHeader(内容处置,附件;文件名=+会话[empcd]的ToString()+-Quotation.pdf);
Response.AddHeader(内容长度,buffer.Length.ToString());
Response.ContentType =应用程序/ PDF
Response.BinaryWrite(缓冲液);
到Response.End();
}
}

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


I've developed a pdf file using itextsharp.

Pdf generation is working fine. After the pdf is created it's being downloaded.

My problem is when the user clicks on Generate PDF button , Pdf is generated and downloaded properly but postback doesn't occurs.

I want the postback to be occured because I want to Reset my Form after Pdf is generated that is Clear All Fields .

How Can I do this ?

Here is my code :

Method to Generate 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);
        }
    }

Generate PDF Button Code :

 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   

        }
    }

解决方案

Postback is occurring since the file is being created. Try the given solution. Your GetPDF(string quote_num) function is doing two tasks that you should break into two functions.

  1. Creating the pdf document.
  2. Downloading the pdf file after it is done.

Now, After you have created the document, you should clear the controls and then send the file as response. Therefore do it as follows:

Create pdf file.

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();
}

Reset the controls.

ClearAllFields(); 

Send the file as response.

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();
    }
}

Note that I also added Response.End() to clear the buffer.

这篇关于回来后的PDF下载后不存在的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆