2015-05-08 29 views
4

我在解決此問題時遇到了一些問題。我有一個應該呈現一個加載PDF的iframe的ajax調用。 PDF是使用另一個環境中託管的Apache FOP生成的。我至今是:如何在MVC中的操作結果中返回PDF

控制器動作(其中的iFrame點的src元素),代碼片段是

var targetStream = new MemoryStream();  
using (var response = FOPrequest.GetResponse()) // response from FOP 
       { 
        using (var stream = response.GetResponseStream()) 
        { 
         stream.CopyTo(targetStream); 

        } 
       } 
return new FileStreamResult(targetStream, "application/pdf"); 

然而,由於預期這不起作用。該流按預期填充,但PDF不會在iFrame中呈現。 我得到一個200(確定)的Http響應代碼。

我會很感激任何幫助。

+0

[關於File vs FileStreamResult vs等主題](http://stackoverflow.com/questions/1187261/whats-the-difference-between-the-four-file-results-in-asp-net -mvc)。 –

+0

我不完全確定這一點,但是當你明確表示你希望它在iframe中呈現時會發生什麼? 'Response.AppendHeader(「Content-Disposition」,「inline; pdfname.pdf」);'但是,我認爲你的問題可能與你的razer代碼有關,你可能想要發佈。 –

+0

正如Nathan所說,爲了找到解決方案,最好還是帶上razer代碼。 –

回答

6

您可以使用返回類型爲FileResult這裏是這樣的:

public FileResult getFile(string CsvName) 
{ 
    //Add businees logic here 
    byte[] fileBytes = System.IO.File.ReadAllBytes(System.Web.Hosting.HostingEnvironment.MapPath("~/Content/Uploads/records.csv")); 
    string fileName = CsvName; 
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); 
} 

可能不是確切的解決方案,你可以操縱和開發你自己的。

希望這會有所幫助。

2

通過的NuGet安裝MvcPdfActionResult

PM> Install-Package MvcPdfActionResult 

只需使用返回類型PdfActionResult控制器將輸出的PDF文檔,而不是HTML。這使用iTextXmlWorker庫將HTML轉換爲PDF。

... 
    return PdfActionResult(model); 
} 

在asp.net 5 MVC項目中從剃鬚刀視圖中生成pdf文檔。 https://www.nuget.org/packages/MvcPdfActionResult/

相關問題