【问题标题】:Open Generated pdf file through code directly without saving it onto the disk直接通过代码打开生成的pdf文件,无需保存到磁盘
【发布时间】:2011-12-07 08:12:24
【问题描述】:

我使用 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格式打开。请有人帮助我。

【问题讨论】:

    标签: asp.net sharepoint pdf-generation itextsharp


    【解决方案1】:

    几乎每一次,接受FileStream 的东西实际上是真正接受FileStream 是其子类的通用System.IO.Stream 对象。这意味着您可以改用它的表亲 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”的内容供您使用。

    【讨论】:

    • 感谢您的回复。我尝试了上面的代码,单击按钮仍然无法打开 pdf 文件 "Hello World" 。还有其他事情要做吗?请帮帮我...
    【解决方案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();
          } 
    

    【讨论】:

    • 你的Response是从哪里得到的?
    • @Tomo 我可以用我的例子来说明:我有一个 MVC5 应用程序,它继承自 System.Web.Mvc.Controller
    【解决方案3】:

    这对我有用。

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

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 2018-06-02
      • 2013-05-15
      • 1970-01-01
      • 2014-02-18
      • 2010-12-25
      相关资源
      最近更新 更多