直接通过代码打开生成的pdf文件,而不将其保存到磁盘上

时间:2011-10-13 22:08:28

标签: asp.net sharepoint pdf-generation itextsharp

我使用Sharepoint 2010,我正在开发一个Web部件,在按钮单击事件中,需要生成并直接打开pdf文件。不应该保存到磁盘上。 我尝试了下面的代码

 protected void Button1_OnClick(object sender, EventArgs e)
    {
        Document myDoc = new Document(PageSize.A4.Rotate());
        try
        {
            PdfWriter.GetInstance(myDoc, new FileStream(@"C:\Directory\Test.pdf", FileMode.Create));
            myDoc.Open();
            myDoc.Add(new Paragraph("Hello World"));
        }
        catch (DocumentException ex)
        {
            Console.Error.WriteLine(ex.Message);
        }
        myDoc.Close();
    }

我还尝试了下面的代码,它也在服务器上生成我不想要的文件。

  Document document = new Document(PageSize.A4);
        PdfWriter.GetInstance(document, new FileStream(HttpContext.Current.Server.MapPath("~/Test.pdf"), FileMode.Create));
        document.Open();
        var WelcomePara = new Paragraph("Hello World");
        document.Add(WelcomePara);
        document.Close();

这个在桌面上创建pdf文件,我需要以pdf格式打开。有人可以帮我。

3 个答案:

答案 0 :(得分:4)

几乎 每个 时间,某事物接受FileStream实际上真的接受了一个System.IO.Stream对象,FileStream是一个子类的。这意味着您可以使用它正在寻找的表亲System.IO.MemoryStream

        byte[] bytes;
        using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) {
            using (iTextSharp.text.Document doc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate())) {
                using (iTextSharp.text.pdf.PdfWriter w = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, ms)) {
                    doc.Open();
                    doc.NewPage();
                    doc.Add(new iTextSharp.text.Paragraph("Hello world"));
                    doc.Close();
                    bytes = ms.ToArray();
                }
            }
        }
        //Do whatever you want with the byte array here

如果你不想要,你不必创建字节数组,我只是展示了如何创建一个PDF并为你提供“.net-like”的东西。

答案 1 :(得分:2)

我终于可以让它工作了。

  using (var ms = new MemoryStream())
      {
          using (var document = new Document(PageSize.A4,50,50,15,15))
          {
              PdfWriter.GetInstance(document, ms); 
              document.Open();
              document.Add(new Paragraph("HelloWorld"));
              document.Close();
          }
          Response.Clear();
          //Response.ContentType = "application/pdf";
          Response.ContentType = "application/octet-stream";
          Response.AddHeader("content-disposition", "attachment;filename= Test.pdf");
          Response.Buffer = true; 
          Response.Clear();
          var bytes = ms.ToArray();
          Response.OutputStream.Write(bytes, 0, bytes.Length);
          Response.OutputStream.Flush();
      } 

答案 2 :(得分:0)

这适合我。

using (var ms = new MemoryStream())
  {

      using (var document = new Document(PageSize.A4,50,50,15,15))
      {

        // step 2
        PdfWriter writer = PdfWriter.GetInstance(document, ms);


        // step 3
        document.Open();

        // XML Worker
        XMLWorker worker = new XMLWorker(css, true);
        XMLParser p = new XMLParser(worker);
        p.Parse(new StringReader(--Your HTML--));


        // step 5
        document.Close();
      }  
      Byte[] FileBuffer = ms.ToArray();
      if (FileBuffer != null)
      {
          Response.ContentType = "application/pdf";
          Response.AddHeader("content-length", FileBuffer.Length.ToString());
          Response.BinaryWrite(FileBuffer);
      }

  }