0

我正在尝试在表格顶部的屏幕上设置一个按钮,单击该按钮会下载包含用户看到的表格内容的 pdf。

这就是我创建 PDF 的方式以及 Action 方法的样子......

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>  
4

1 回答 1

0

您可以查看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 规则,它们将不会被翻译。

于 2012-07-19T08:38:52.847 回答