代码之家  ›  专栏  ›  技术社区  ›  Carls Jr.

在没有用户提示的情况下将生成的pdf直接保存到服务器目录文件夹

  •  2
  • Carls Jr.  · 技术社区  · 15 年前

    我的一个朋友给了我这个任务,这样我可以更容易地学习高级编程。我目前正在使用itext sharp将html页面转换为pdf,并将pdf作为附件通过电子邮件发送。我的想法是先将pdf保存到服务器机器的文件夹名ToBeEmailedPDF文件夹中,然后再将其用作电子邮件附件。困扰我的是,这个对话框,如你在图片中看到的,显示使用我下面的代码。 alt text

    StringBuilder sb = new StringBuilder();
    StringWriter tw = new StringWriter(sb);
    HtmlTextWriter hw = new HtmlTextWriter(tw);
    pnlPDF.RenderControl(hw); // pnlPDF contains the html contents to be converted to pdf
    string htmlDisplayText = sb.ToString();
    Document document = new Document();
    MemoryStream ms = new MemoryStream();
    PdfWriter writer = PdfWriter.GetInstance(document, ms);
    StringReader se = new StringReader(htmlDisplayText);
    HTMLWorker obj = new HTMLWorker(document);
    document.Open();
    obj.Parse(se);
    // step 5: we close the document
    document.Close();
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment; filename=report.pdf");
    Response.ContentType = "application/pdf";
    Response.Buffer = true;
    Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
    Response.OutputStream.Flush();
    Response.End();
    

    我知道你们很多人知道更好的方法或者知道如何解决我的问题。请帮帮我。谢谢您!

    3 回复  |  直到 15 年前
        1
  •  3
  •   Pavel Morshenyuk    15 年前

    客户端和服务器端有很大的区别。

    Response 类可以将内容输出到客户端计算机,如果需要在服务器上保存文件,请使用 File.WriteAllBytes ( msdn )方法

        2
  •  2
  •   Darin Dimitrov    15 年前

    出于安全考虑,你要达到的目标是不可能的。只有用户才能决定将附件保存到何处。想象一下如果这是可能的:那么你就可以将任何类型的病毒保存到用户计算机上的任何类型的文件夹中。作为显示“保存”对话框的另一种选择,您可以在线打开PDF:

    Response.AddHeader("Content-Disposition", "inline; filename=report.pdf");
    
        3
  •  0
  •   Tony Rad    13 年前

    您可以使用以下代码保存它:

    PdfWriter.GetInstance(pdfDoc, new FileStream(context.Server.MapPath("~") + "/PDF/" + reportName + ".pdf", FileMode.Create));
    
    推荐文章