2012-07-19 37 views
0

我正在嘗試的是在桌面上的一個屏幕上有一個按鈕,當點擊該按鈕時,下載帶有用戶看到的表格內容的PDF。如何通過mvc動作發送html表格?

這是我如何創建PDF,什麼動作方法看起來像......

public ActionResult DownloadPdf(string content) 
{ 
    MemoryStream outputStream = new MemoryStream(); 
    MemoryStream workStream = new MemoryStream(); 
    Document document = new Document(); 
    PdfWriter.GetInstance(document, workStream); 
    document.Open(); 
    document.Add(new Paragraph(content)); 
    document.Close(); 

    byte[] byteInfo = workStream.ToArray(); 
    outputStream.Write(byteInfo, 0, byteInfo.Length); 
    outputStream.Position = 0; 

    //Response.AddHeader("Content-Disposition", "attachment; filename=test.pdf"); 
    //return File(byteInfo, "application/pdf", "test.pdf"); 
    return File(outputStream, "application/pdf", "test.pdf"); 
} 

這是表我嘗試打印...

<table class="donationTable statementTable"> 
    <tr> 
    <th>Month</th> <th>Fees</th> 
    </tr> 
    <tr> 
    <td> 
     Jan 
    </td> 
    <td> 
     $5 
    </td> 
    </tr>  
</table> 

<a href = "@Url.Action("DownloadPdf", "Home", new { content = "" })">Download</a> 
+0

該表格是如何生成的?你正在使用一些服務器端控制?你打算使用什麼庫來創建一個PDF文件,因爲我們都知道.NET沒有內置的這種能力。 – 2012-07-19 08:31:38

+0

表格是硬編碼(這是您向我們展示的內容)還是包含動態數據?此外,我已將'itextsharp'標記添加到您的問題中,顯然這是您用於生成PDF的框架。 – 2012-07-19 08:33:30

+0

幾個PDF生成器庫可以從URL創建PDF。 – 2012-07-19 08:33:54

回答

0

您可能需要請看following article on CodeProject,它說明了使用iTextsharp將Razor視圖轉換爲PDF的一個好方法。我們的想法是,你會把這個表到部分,然後:

public ActionResult DownloadPdf() 
{ 
    MyViewModel model = ... 
    return this.ViewPdf("My table", "_SomePartial", model); 
} 

ViewPdf是執行Razor視圖和在一個字符串,然後將其饋送到iTextSharp的,並轉換成PDF檢索其呈現的輸出的擴展方法。

現在你可以有你的頁面指向這個動作錨,這將允許次用戶下載PDF:

@Html.ActionLink("Export table as Pdf", "DownloadPdf", null, new { target = "_blank" }) 

這是說,你應該知道,iTextSharp的還沒有被設計爲轉換HTML轉換成PDF格式,並對其提供非常有限的支持。如果你的HTML表格中有一些奇特的CSS規則,它們將不會被翻譯。

+0

如何使用viewpdf? – Beginner 2012-07-19 11:21:14

+0

正如我的回答所示:'返回this.ViewPdf(「我的表」,「_SomePartial」,模型);'。但是你必須從'PdfViewController'派生而不是'Controller',因爲在那裏定義了'ViewPdf'方法。只需從CodeProject文章下載示例項目,即可開始播放。 – 2012-07-19 11:26:06