Сохраните сгенерированный PDF-файл непосредственно в папку каталога сервера без запроса пользователя. - PullRequest
2 голосов
/ 23 ноября 2010

Мой друг дал мне эту задачу, чтобы я мог немного научиться программированию заранее.В настоящее время я делаю преобразование html-страницы в pdf с использованием itext sharp и отправляю по электронной почте 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 ]

3 голосов
/ 23 ноября 2010

Существует большая разница между клиентской и серверной сторонами.

Response класс может выводить содержимое на клиентскую машину, если вам нужно сохранить файл на сервере, используйте что-то вроде File.WriteAllBytes ( msdn ) метод

2 голосов
/ 23 ноября 2010

То, что вы пытаетесь достичь, невозможно по соображениям безопасности.Только пользователь может решить, где он хочет сохранить вложение.Представьте, если бы это было возможно: тогда вы сможете сохранять любые вирусы в любые папки на компьютере пользователя.В качестве альтернативы отображению диалогового окна «Сохранить» вы можете открыть встроенный файл PDF:

0 голосов
/ 13 сентября 2011

Вы можете сохранить его, используя следующий код:

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