将生成的pdf直接保存到服务器目录文件夹,无需用户提示

时间:2010-11-23 08:20:57

标签: c# asp.net sendmail

我的一个朋友给了我这个任务,所以我可以更轻松地学习高级编程。我目前正在使用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 个答案:

答案 0 :(得分:3)

客户端和服务器端之间存在很大差异。

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

答案 1 :(得分:2)

出于安全原因,您无法实现的目标。只有用户才能决定要保存附件的位置。想象一下,如果这是可能的:那么你就可以将任何类型的病毒保存到用户计算机上的任何类型的文件夹中。作为显示“保存”对话框的替代方法,您可以打开内联PDF:

Response.AddHeader("Content-Disposition", "inline; filename=report.pdf");

答案 2 :(得分:0)

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

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