最常用的方法是生成PDF报告(JavaScript,node.js)?

时间:2013-06-26 21:32:24

标签: javascript node.js pdf-generation

任何从事这类工作的人都可以描述一般过程吗?我现在很困惑。根据报告,我的意思是具有徽标,表格,页眉和页脚的视觉上吸引人的文档,并且将动态检索数据。

我看到的方法是:

  1. 使用生成PDF的服务器端库(node.js模块)。使用Content-Type: application/pdf将字符串表示作为响应发送。 问题:我选择了PDFKit,但它不起作用,根本没有内容显示。它使用PDF 1.3,这是旧的。

  2. 在客户端生成PDF。 问题:最流行的图书馆似乎是jsPDF,但它不能很好地制作复杂的文档。

  3. 在PDF源代码中编写模板并填写服务器端的数据。 问题:编码很奇怪,例如,如果我只做doc.text("1"),那么只有字符串“1”会出现很多无法识别的字符。我对此非常困惑。

  4. 最后,如果有人提供可以帮助我理解编码的链接,那将会非常有用!这让我感到非常困惑。

    非常感谢任何有类似任务的经验!

3 个答案:

答案 0 :(得分:15)

我个人没有这样做,但我会尝试的第一件事就是:

  1. 在服务器端动态构建相应的HTML文档和CSS
  2. 使用phantomJS呈现该文档
  3. 告诉phantomJS将该文档转换为PDF,保存在临时文件中
  4. 通过将临时PDF文件写入响应正文
  5. 将PDF作为HTTP响应发回
  6. 删除临时文件
  7. 如果您正在努力处理内容类型,内容处理等问题,那么如果您在磁盘上有一个有效的pdf文件并且只是将该数据写入HTTP响应,则不必担心这一点。使用正确的标题,您应该能够要求浏览器显示PDF或将其视为要保存为下载的文件。

答案 1 :(得分:9)

作为jsreport团队的成员,我会试一试。

jsreport平台提供了多种生成pdf报告的方法。最常见的包括使用phantomjs将html转换为pdf。如果指定的话,jsreport还会编译和渲染把手或jsrender html模板,它可以嵌入图像,添加页眉/页脚,运行自定义javascripts等等。

您可以使用" Hello World Phantom Pdf"示例并查看您拥有的选项 https://playground.jsreport.net

完成游戏后,您可以将jsreport onlinedownload and install jsreport服务器用于您的公司。然后,您就可以调用其REST API并生成报告。

更多问题

  • jsreport将在pdf或html的响应中提供正确的内容类型。您可以让浏览器显示结果
  • 数据可以发送到jsreport api或通过自定义脚本
  • 进行检索

答案 2 :(得分:3)

我不确定最常用的方法是什么,但我个人喜欢创建一个HTML模板,在我的服务器端代码中填充它,然后使用wkhtmltopdf将HTML转换为PDF。如果您使用的是.NET,则应该查看WkHtmlToXSharp(这是wkhtmltopdf的.NET包装器。)