javascript - 动态 PDF 与 HTML 转 PDF

标签 javascript html angularjs pdf highcharts

我目前正在为医疗保健行业开发多个仪表板,常见要求之一是从屏幕上按原样生成 PDF。我们在这些仪表板上没有任何常见的 CRUD 操作。它们通常包括大量图表(使用 highcharts)、一些表格数据、 Accordion 等。所有内容都呈现为少数选择语句的一部分,这些选择语句将在页面加载时或用户单击某些图表或任何 HTML 元素时触发.

我正在研究实现此目的的方法,有 2 个选项,其中最著名的选项是使用第三方库从 HTML 本身生成 PDF,这只需编写大约 3 个内容即可4行代码。

另一种选择是编写代码来动态生成类似于 UI 的 PDF。这将需要更多的努力,因为我们必须考虑品牌和样式,生成与仪表板 UI 上完全相同的图表,创建与仪表板 UI 上一样的表格数据。

所有仪表板的共同 UI 要求是支持所有主要浏览器 - IE 从 9 开始、forefox、Chrome、Safari。还支持 iPad、最新 3-4 版 iPhone 和其他最常见的设备。

我们用于这些仪表板的技术是 Angular 2.0、一些 JQuery、HTML、CSS 和 asp.net Web api,在某些情况下还包括 asp.net MVC。

我需要了解上述两种为所有这些仪表板生成 PDF 的方法的优缺点。我用谷歌搜索了一下,发现很少。有人可以分享一些对此的见解并根据他们的经验提供一些意见吗?

最佳答案

根据您的描述,您至少需要将两者结合起来。如果您可以使用 HTML 到 PDF 转换器,那就更好了,因为这样可以节省大量开发时间。但由于 UI 具有 Accordion 等功能,这意味着您需要确定如何在静态 PDF 中呈现动态信息。

所以我过去使用的混合方法是使用 Angular 来标记 HTML,如下所示:

<my-accordion ng-if="!ExportingPDF"> ... accordion view for browser ...</my-accordion>
<div ng-if="ExportingPDF"> ... expanded and slightly-modified view for PDF ... </div>

当用户单击“导出 PDF”按钮时,您可以创建一个函数来执行 $scope.ExportingPDF = true,然后抓取页面上的所有可见 HTML(在短暂的 $timeout 延迟,为 Angular 提供更新 DOM 的时间。

然后,您的 ExportPDF 函数会将 HTML POST 到服务器,其中基于服务器的 HTML 到 PDF 代码库将转换 HTML,然后将其作为文件下载附件发送回浏览器.

示例代码:

$scope.ExportPDF = function() {
    $scope.ExportingPDF = true;
    $timeout(function() {
        $ajax.post("/path/to/conversion-routine.abc", { data: $('html')[0].outerHTML }
    }, 50); // short delay so Angular has time to update the DOM
}

这使您可以利用 Angular 和现有标记的强大功能,同时仍然处理所有需要调整以在静态 PDF 文档中正确呈现的奇怪的小 UI 事物。

关于javascript - 动态 PDF 与 HTML 转 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39881022/

相关文章:

javascript - ASP.NET OnTextChanged 事件没有立即响应

javascript - 如何使用 jQuery 从动态内容调用选择器?

jquery - 添加新数据后停止调整元素大小?

angularjs - 使用 Protractor 进行 slider 测试

html - Ionic App 中模态的 ionic 滑动框问题

javascript - 多个参数与选项对象

javascript - Squarespace 模板和 Less CSS

javascript - undefined 不是 canjs 中的函数

javascript - 切换框的淡入淡出效果

javascript - AngularJS typeahead 调用 webapi