在按钮单击后使用Itext Sharp生成pdf后,单击同一页面上的另一个按钮将不会触发

时间:2011-11-18 23:27:43

标签: asp.net sharepoint itextsharp itext

我正在使用Itext Sharp通过点击按钮为我网站上的现有订单创建pdf。它已作为Web部件添加到Sharepoint站点上。

在同一页面上,还有另一个包含许多服务器控件的Web部件。但是,当我点击任何按钮时,按钮点击事件不会触发。只有当我刷新页面时,事件才会被触发。

我无法同时创建pdf,然后立即点击另一个按钮而不刷新页面。我不明白我做错了什么。

以下是我的代码。

  protected void PdfGenerate_OnClick(object sender, EventArgs e)
  {
      Font Arial = FontFactory.GetFont("Arial", 12, BaseColor.BLACK);
      string imagename = "AAlogo.gif";
      string imagepath = Page.Server.MapPath("/_layouts/Images/ImagesFolder/Image1.gif" ) ;

      using (var ms = new MemoryStream())
      {
          using (var document = new Document(PageSize.A4,50,50,15,15))
          {
              PdfWriter.GetInstance(document, ms); 
              document.Open();
              Paragraph img = new Paragraph();
              Image aaImg = iTextSharp.text.Image.GetInstance(imagepath);
              img.Add(aaImg);
              img.IndentationRight = 5f;
              //code to add all the elements here  
              PdfPTable table = new PdfPTable(3);
              PdfPCell col1 = new PdfPCell(new Phrase("oRDER Number"));
              table.AddCell(col1);
              //  code for the table...
                  document.Add(table);
              }
             document.Close();
          }
          Response.Clear();
          Response.ContentType = "application/octet-stream";
          Response.AddHeader("content-disposition", "attachment;filename= Order Number" + .pdf");
          Response.Buffer = true; 
          Response.Clear();
          var bytes = ms.ToArray();
          Response.OutputStream.Write(bytes, 0, bytes.Length);
          Response.OutputStream.Flush();
      } 

  }

1 个答案:

答案 0 :(得分:2)

当您清除并清除响应时,您正在中断/中止asp.net的页面生命周期。最好将下载部分放在另一个文件(单独文件的Page_Load)中,并从当前页面调用它。更多信息:++