Подскажите скачать сгенерированный файл PDF - PullRequest
0 голосов
/ 27 августа 2010

Я пытался сгенерировать простые PDF-файлы из своего приложения, чтобы позже я мог перейти к созданию PDF-файла с динамическими данными.Мой код генерирует файлы, но я хочу, чтобы браузер также запрашивал загрузку файла.

Я даже не хочу хранить сгенерированные файлы на моем сервере, но я не уверен, какзаставить его просто предоставить его пользователю без предварительного сохранения его на диске сервера.

public ActionResult GetPDF()
{
    Document document = new Document();
    PdfWriter.GetInstance(document, new FileStream(Server.MapPath("../Content/test.pdf"), FileMode.Create));
    document.Open();
    string strHTML = "<B>I Love ASP.Net!</B>";
    HTMLWorker htmlWorker = new HTMLWorker(document);
    htmlWorker.Parse(new StringReader(strHTML));
    document.Close();

    return File(document, "application/pdf", Server.HtmlEncode(filename));//this doesnt work, obviously
}

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Используйте FileStreamResult Действие

public FileStreamResult Export(int? ID)
{        
    MemoryStream stream = new MemoryStream();

    //Start of PDF work using iTextSharp PDF library
    Document pdf = new Document();
    PdfWriter writer = PdfWriter.GetInstance(pdf, stream);    
    pdf.Open();    
    pdf.Add(new Phrase("test"));    
    pdf.Close();
    //End of PDF work using iTextSharp PDF library

    //Where the download magic happens
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=Log.pdf");
    Response.Buffer = true;
    Response.Clear();
    Response.OutputStream.Write(stream.GetBuffer(), 0, stream.GetBuffer().Length);
    Response.OutputStream.Flush();
    Response.End();

    return new FileStreamResult(Response.OutputStream, "application/pdf");
}
0 голосов
/ 27 августа 2010

вам нужно сделать что-то вроде ...

изменить

PdfWriter.GetInstance(document, new FileStream(Server.MapPath("../Content/test.pdf"), FileMode.Create));

до

var memorystream ms = new memorystream;
PdfWriter.GetInstance(document, ms);

и затем в конце ...

Response.Clear;
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=PDFFile.pdf");

ms.Write(Response.OutputStream);
...