我目前正在为医疗保健行业的多个仪表板工作,其中一个常见的需求是从屏幕上生成PDF。我们在这些仪表板上没有任何常见的CRUD操作。它们通常包括很多图表(使用highcharts),一些表格数据,accordions等,并且所有内容都呈现为几个select语句的一部分,这些语句将在页面加载或用户单击某些图表或任何HTML元素时触发。
我正在寻找这样做的方法,有两种选择,其中最广为人知的选择是使用第三方库从HTML本身生成PDF,这包含了编写大约3-4行代码的最小努力。
另一种选择是编写代码来动态生成PDF,它看起来像UI。这将需要更多的工作,因为我们必须考虑品牌和样式,生成看起来完全像仪表板UI上的图表,创建表格数据,就像在仪表板的UI上一样。
所有仪表板的共同UI要求是支持所有主要浏览器- IE从9开始,forefox,Chrome,Safari。也支持iPads,最近3-4个版本的iPhones和其他最常见的设备。
我们在这些仪表板上使用的技术是angular 2.0,一些JQuery,HTML和asp.net web,在某些情况下是asp.net MVC。
我需要知道以上两种方法的优缺点,以生成所有这些仪表板的PDF。我在谷歌上搜索了一下,发现的信息很少。有人可以分享一些对此的见解,并根据他们的经验提供一些输入吗?
发布于 2016-10-06 05:17:11
根据您所描述的,您至少需要将这两种方法混合使用。如果可以使用HTML-to-PDF转换器,那就更好了,因为这样可以节省大量的开发时间。但是由于UI具有类似折叠的东西,这意味着您需要确定如何在静态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>
当用户单击"Export PDF“按钮时,您可以创建一个函数来执行$scope.ExportingPDF = true
,然后抓取页面上所有可见的HTML (在短暂的$timeout
延迟之后,给出一定的时间来更新DOM)。
然后,您的ExportPDF函数将把HTML POST
到服务器,在服务器上,基于服务器的HTML- to -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内容。
https://stackoverflow.com/questions/39881022
复制相似问题