【问题标题】:Creating pdf from .net mvc view从 .net mvc 视图创建 pdf
【发布时间】:2011-04-16 04:26:10
【问题描述】:

我在我的应用程序中使用 asp.net mvc2。我有一个接受模型并以某种格式呈现其数据的视图。我希望将此页面转换为 pdf 文件,以便可以通过附件发送或即时创建和下载。我在使用 itextsharp 库创建 pdf 方面取得了一些成功,但他们说它对 html 和 css 有非常基本的支持。如果有人使用 itextsharp 或任何其他库将复杂的 html 页面呈现为 pdf,请帮助我解决这个问题。任何 cmets 都受到高度赞赏

谢谢

【问题讨论】:

  • “请帮我解决这个问题”——具体解决哪个问题?
  • @Tom 从复杂的 html 即时或从保存的 html 文件创建 pdf,这些文件应保留通过 css 定义的所有格式
  • 列出您尝试过的内容可能是个好主意,这样其他人就不会发布您已经拒绝的内容的答案。

标签: asp.net-mvc-2 pdf pdf-generation itextsharp


【解决方案1】:

我认为related question 在一定程度上会有所帮助。请注意,如here 所述,HTML 显示和 PDF 文档有不同的用途。基本思路是后者“专为打印输出而设计”,而另一个“专为视频显示而设计”。

我的建议是,在大多数情况下,当从 Web 打印时,可以选择使用此声明创建单独的样式表进行打印。这个想法是简化样式并使其更易于打印(=不那么复杂)。

以下来自 A List Apart 的 article 提供了对该选项的进一步了解。

<link rel="stylesheet" type="text/css" media="print" href="print.css" /> 

另一个免费的 PDF 库是 PDFSharp。但是,它们支持从 HTML 到 PDF 的转换。

其他相关的 SO 问题

【讨论】:

    【解决方案2】:

    将渲染视图 (html) 捕获为字符串并将其传递给 Winnovative PDF 创建器,这是一个非常好的工具,可以保留复杂的格式。 这是从捕获的 html 创建 PDF 的代码

        string test="\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\r\n<head>\r\n <link rel=\"Stylesheet\" href=\"../../Content/style.css\" type=\"text/css\" />\r\n <title>Cover Page</title>\r\n <style type=\"text/css\">\r\n html, body\r\n {\r\n\t font-family: Arial, Helvetica, sans-serif;\r\n\t font-size: 13pt;\r\n\t padding: 0px;\r\n\t margin: 0px;\r\n\t background-color: #FFFFFF;\r\n\t color: black;\r\n\t width: 680px;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n <div>\r\n Ssotest Ssotest, \r\n </div> \r\n</body>\r\n</html>\r\n"
    
                   FileStreamResponseContext response = new FileStreamResponseContext();
    Response .clear();
         Document doc = new Document();
                    doc.DocumentInformation.CreationDate = DateTime.Now;
                    doc.DocumentInformation.Title = "Test Plan";
                    doc.DocumentInformation.Subject = "Test Plan";
                    doc.CompressionLevel = CompressionLevel.NormalCompression;
                    doc.Margins = new Margins(0, 0, 0, 0);
                    doc.Security.CanPrint = true;
                    doc.ViewerPreferences.HideToolbar = false;
                    doc.ViewerPreferences.FitWindow = false;
    
        string baseUrl = String.Format("http://localhost{0}/", Request.Url.Port == 80?"":":" + Request.Url.Port.ToString());
    
        PdfPage docTestPlan = doc.AddPage(PageSize.Letter, new Margins(0, 0, 0, 0), PageOrientation.Portrait);
        // passing the string test returned from the string writer
    
           HtmlToPdfElement htmlToPdf = new HtmlToPdfElement(test, baseUrl);
                    htmlToPdf.FitWidth = false;
                    docTestPlan.AddElement(htmlToPdf);
    
    
                    /******************************************
                     * put doc in a memory stream for return */
                    response.FileDataStream = new MemoryStream();
                    doc.Save(response.FileDataStream);
                    doc.Close();
                    response.FileDataStream.Position = 0;
    
                    return new FileStreamResult(response.FileDataStream, "application/pdf");
    
    
    
    If you need to capture the controller action follow my post here.[http://stackoverflow.com/questions/5553674/capturing-html-to-string-in-mvc2-0][1]
    

    您可以从Winnovative PDF creator官网获取示例代码。

    【讨论】:

      【解决方案3】:

      您也可以考虑使用http://itextpdf.com/,它提供 html 到 pdf 的转换。

      "iText 可以将 XML 或 HTML 文件转换为 PDF,但仅限于非常基本的级别。将文档从一种格式转换为另一种格式超出了 iText 的范围。不:iText 不转换 Word 文档转为 PDF!"

      【讨论】:

      • 感谢您的帮助,我尝试了 itextsharp,但它不能满足我的要求,是的,它确实非常基本
      【解决方案4】:

      虽然不是免费的,但您可能想查看 PDF 转换服务。最新的测试版支持 HTML 转换,非常精确。

      看看this post,它适用于 .net 和基于 java 的环境。

      我开发了这个产品,所以通常的免责声明适用。很乐意回答任何问题。

      【讨论】:

      • 我很欣赏你的回复,但我更倾向于开源解决方案
      猜你喜欢
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      相关资源
      最近更新 更多