当前位置: 首页 > 知识库问答 >
问题:

从 Node/Express/Angular/PhantomJS 导出带有图表的 PDF 报告

曹景铄
2023-03-14

我在基于DaftMonk的生成器(https://github.com/DaftMonk/generator-angular-fullstack)的MEAN堆栈中使用AngularJS。我对几乎所有Angular/JS/Node(和stackoverflow)都相当陌生,所以如果我需要重写我的问题,请随时指出!)。

我的目标是从一个包含六个图表,图像和文本的角度页为用户产生一个多页PDF报告。

在stackoverflow和Google上有许多与潜在解决方案相关的问题,但是在详尽地检查了这些问题之后,它们对我需要实现的目标没有帮助(或者我不明白如何在我的场景中使用它们..)。

目前,当用户导航到“报告页面”时,一个超文本传输协议请求从Angular控制器发送到Node/Express,Angular控制器检查用户角色/组ID,查询数据库,分析数据并将其发送回浏览器以呈现为图形(当前使用angle-chartjs和flot)。

用户选择图形类型,并可以从可能的20个列表中选择最多六个图形显示。这六个图形是需要导出到PDF报告(以及其他信息)的图形。尽管我目前的解决方案是IE10,在使用Modernizr的旧浏览器中禁用PDF导出,但我需要尽可能使其与浏览器兼容(至少是IE8)。

stackoverflow和Google可能的解决方案包括在Node中使用PhantomJS来捕获屏幕,或者使用客户端PDF渲染器(例如jsPDF)。其中,我的感觉是PhantomJS将提供最大的灵活性/浏览器兼容性。此外,我需要根据用户角色生成多个不同的报告,因此在浏览器中生成报告的所有代码都是不可取的。但我完全不知道如何使用平均堆栈访问“客户看到的”。PhantomJS需要有效地作为客户端登录,并访问客户端所做的六个图形选择。

根据我的研究,使用PhantomJS需要创建一个html页面,以某种方式将客户端看到的内容/数据/图形选择传递给它,然后在发送回浏览器之前,捕获这些内容并呈现为PDF。一种方法可能是将所需的信息传递回Express(用POST?)然后呈现一个服务器端的html页面,PhantomJS可以指向这个页面,但是我不知道如何实现这个(或者是否可能)。另一种可能是将客户报告数据、选择等存储在数据库中,并启动一个任务来呈现PDF,并在完成后将其发送回浏览器,但同样,我不知道如何实现这一点。

我读过PhantomJS中的Cookie或使用代码浏览登录页面,但这似乎是一种很麻烦的方法。可以在服务器端创建带有图表的html文件吗。js(或其他图表库)注入(和角度?)以及PhantomJS渲染为PDF所需的所有用户数据/图表选项?我想在某些方面,我需要能够在服务器端使用PDF生成器、图表库等来创建PDF。

关于如何实现这一点的任何建议(包括可能的代码示例)将不胜感激。

共有1个答案

郦祺
2023-03-14

我想我和你有同样的问题(只有我在服务器端使用Laravel)。

我想出的想法是将angular-chartjs生成的画布转换为图像(在画布元素上使用toDataURL()

$('.theCanvas').each(function () {
           var canvas=this;
           img=JSON.stringify(canvas.toDataURL());

});

http://plnkr.co/edit/PkZiqYynzQXehbe6p1eH?p=preview然后将图像发送到服务器以创建pdf,最后将创建的pdf的链接发送给用户。

就我而言,它们是大量从服务器端的html生成PDF的包,我不知道是否存在Node工具。

我希望这能有所帮助。

 类似资料:
  • 在java swing(桌面)应用程序中,我需要将jasper报告导出为PDF文件。下面的代码输出jasper报告和pdf文件,但问题是pdf的大小为零,没有显示报告内容,甚至无法打开pdf,jasper版本为3.1.4,jasperreports-3.1.4。罐子

  • 我试图在jrxml中创建表格。表格中的列数可能会很大,当我试图以PDF格式导出报告时,由于列数很大,数据变得不可读。有什么方法可以让我们以更大的页面尺寸(如A3)导出报告,或者在A4尺寸上增加滚动功能。注意:报告只需要导出为pdf格式,而不是CSV或任何其他格式。 谢谢,任何帮助感谢。

  • 本文向大家介绍phantomjs导出html到pdf的方法总结,包括了phantomjs导出html到pdf的方法总结的使用技巧和注意事项,需要的朋友参考一下 最近要为我们的文章服务做一个转pdf的功能。经过比较,我觉得phantomjs是转化比较好的。现在讲讲如何使用。 环境 centos x86_64 下载 可以到官网下载: 官网 或者wget也可以: wget -P /tmp/ https:

  • 问题内容: 我知道这个问题有答案,但它们并没有为我充分发挥作用。我正在使用Angular 1.4和Express4。Express正在处理API调用,而Angular应该正在处理所有HTML。 我的快递app.js: 这是有角度的app.js 现在,如果我转到http:// localhost:3000 / ,则会得到预期的主Angular视图。问题是当我转到http:// localhost:3

  • 在jasper-report中生成PDF/A包含许多缺陷,并且在某些版本的jasper-report中不受支持。这就是为什么我决定传递这篇问答文章的原因,它指出了将一个带有图形的简单报表导出到PDF/a所必需的步骤和库版本 示例数据(usersrep.csv) 如果将报告导出为pdf,我需要做什么来生成pdf/A-1A?

  • 我有一份广泛的报告,在SSR中可达5000多页。我想要这个报告导出为PDF,保存并发送给用户。我报告抛出“系统内存不足异常”错误尝试导出到PDF。我尝试使用订阅服务,但失败的原因是:“发送邮件失败:在呈现报告期间发生错误。邮件将不会被重新发送”(failure send mail:rendering of the report.mail will not resent)。错误。对于如何将此报告导出