首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态PDF v/s HTML到PDF

动态PDF v/s HTML到PDF
EN

Stack Overflow用户
提问于 2016-10-06 02:13:29
回答 1查看 618关注 0票数 1

我目前正在为医疗保健行业的多个仪表板工作,其中一个常见的需求是从屏幕上生成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。我在谷歌上搜索了一下,发现的信息很少。有人可以分享一些对此的见解,并根据他们的经验提供一些输入吗?

EN

回答 1

Stack Overflow用户

发布于 2016-10-06 05:17:11

根据您所描述的,您至少需要将这两种方法混合使用。如果可以使用HTML-to-PDF转换器,那就更好了,因为这样可以节省大量的开发时间。但是由于UI具有类似折叠的东西,这意味着您需要确定如何在静态PDF中呈现动态信息。

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

代码语言:javascript
运行
复制
<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,然后将其作为文件下载附件发送回浏览器。

示例代码:

代码语言:javascript
运行
复制
$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内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39881022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档