【问题标题】:C# MVC generate PDF from View with NReco.PdfGeneratorC# MVC 使用 NReco.PdfGenerator 从 View 生成 PDF
【发布时间】:2018-06-12 09:17:49
【问题描述】:

我目前正在做一个项目,我需要创建一个可以导出为 pdf 的“仪表板”。我想使用 Rotativa,但由于我们的应用程序使用 .NET 框架 4.0,所以这是不可能的。所以我找到了 NReco PdfGenerator。

这就是我如何创建 PDF 结果的代码:

var ViewAsString = RenderViewAsString("~/Views/QMetrics/StandardDashboard.cshtml", viewModel);
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
htmlToPdf.PageWidth = 1600;
htmlToPdf.PageHeight = 900;
var pdfBytes = htmlToPdf.GeneratePdf(ViewAsString);
FileResult FileResult = new FileContentResult(pdfBytes, "application/pdf");
FileResult.FileDownloadName = "Dashboard-" + viewModel.ProjectName + "-" + 
DateTime.Now.ToString() + "-.pdf";
return FileResult;

它成功地创建了包含来自后端的所有内容(项目信息等)的 PDF 页面,但页面看起来非常难看。在原始页面上,我有 2 列,在 PDF 页面上,它将所有内容放在一列中。我尝试了几种不同的页面大小,并将布局更改为无响应,但没有任何改变。

我的第一个建议是创建 PDF 时不包含引用的 CSS 和 JS 文件,因此我复制了来自外部文件(bootstrap、Chart.js)的所有内容并将其直接粘贴到 .cshtml 文件中.但什么都没有改变。我的图表没有呈现/加载,缺少的 CSS 内容仍然不存在。

在 NReco PDFGenerator 网站上,他们说它支持复杂的 CSS 代码和 javascript 代码,所以我真的不明白为什么这不起作用。

这里有没有人使用过 NReco,或者有人可以推荐其他适用于 .NET 4.0 的东西吗?

【问题讨论】:

    标签: c# asp.net-mvc-4 pdf nreco


    【解决方案1】:

    NReco PdfGenerator 内部使用wkhtmltopdf 工具,因此您可以检查它及其选项。

    关于 2 列:如果您不使用 flex/grid 布局,一切都应该可以正常工作。可能您需要禁用 wkhtmltopdf 智能收缩逻辑(默认启用)并明确定义网页“窗口”大小(使用“--viewport-size 1600”选项)。

    关于 CSS 和图表:您需要检查 wkhtmltopdf 是否可以访问 CSS 文件,最简单的方法是从命令行运行 wkhtmltopdf.exe 并检查控制台日志输出(或者,在C#)。对于 Chart.js,请确保图表容器 div 具有明确的宽度(不是以 % 为单位),并且没有 js 错误(您可以通过指定“--debug-javascript”选项在控制台中获取它们)。如果您的 js 代码使用 'bind' 方法,则必须包含 polyfill,因为 wkhtmltopdf 中使用的 WebKit 引擎版本不支持 'bind'。

    【讨论】:

    • 感谢您的回复,对不起,我的回答迟了,我休假了几天。我正在使用引导程序的“原始”和“col-xx-xx”类进行布局。你知道我可以在哪里禁用“智能收缩逻辑”吗?抱歉,我对 wkhtmltopdf 完全陌生,不知道所有设置的位置。我会尝试在图表容器中添加一个固定的布局,也许这会有所帮助:D 感谢您的回答 :)
    猜你喜欢
    • 2012-01-16
    • 2015-11-22
    • 2018-05-12
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2023-03-30
    相关资源
    最近更新 更多