ITPub博客

首页 > 应用开发 > Javascript > 使用Nodejs和Kue动态生成PDF文档

使用Nodejs和Kue动态生成PDF文档

原创 Javascript 作者:cenfeng 时间:2019-07-16 18:51:57 0 删除 编辑
PDF文档是超媒体文档的一种非常常见的形式。 无论是书籍,账单还是发票,我们每天都会使用PDF文档。 在本文中,我们将学习如何使用Node.js和名为Kue的Worker队列生成PDF文档。 PDF生成用于基于电子商务的应用程序,机票,酒店预订等产品。我们可以使用相同的原则,我将在下面向您展示并应用它来实现该功能。

先决条件

您需要安装以下软件:

  • Node.js最新稳定版。
  • Redis的


您可以从官方站点安装Node.js. 

要在Ubuntu 18.04中安装Redis,请使用以下命令。

$  sudo  apt-get  update 
$  sudo    apt-get    install  redis-server

``` 
要在Mac中安装Redis,请阅读以下文章。
Redis入门,聊天应用程序

启动Redis

redis-3.2.8 $  src / redis-server


要在Windows 10上安装Redis,请访问 此Redis官方实验室安装指南并按照步骤操作 。

关于Kue 
Kue 是一个运行在 Redis 之上的工作队列 。 我们可以使用队列将任务委派给多个worker,并节省处理时间。 使用队列系统完成高计算任务,例如视频渲染,文档生成,繁重的数学计算。

我正在使用 Kue 演示如何使用该软件以高效的方式设计和扩展系统。

创建节点项目
创建一个新文件夹并使用终端或命令提示符切换到该文件夹。



使用以下命令创建新的Node项目。


$  npm  init  --y


让我们安装依赖项。 我们需要kue和pdfkit依赖。


$  npm  install  --save  kue  pdfkit


真棒。 让我们编写我们的应用程序。

我将创建两个命名 job.js 和 worker.js的 文件 。

在 Job.js中 ,我将编写代码来读取文件或数据库并创建一个Kue作业。

在 Worker.js中 ,我将编写代码来收听Kue主题并在请求到来时生成PDF文档。

为简单起见,这里有一些我将用于生成PDF文档的条目。

invoice.js

模块 。 exports  =  {  
内容 :  [  {
'  index  '  :   1  ,
'  text  '  :   '  你好Shahid,你本月收取100美元的服务费。 “
},{
'  index  '  :   2  ,
'  text  '  :   '  你好杰森,你这个月收取50美元的服务费。 “
},{
'  指数 '  :   3  ,
'  text  '  :   '  你好Mark,你本月收取76美元的服务费。 “
}  ]
}


这是我们的 Job.js 代码。

const  kue  =  require  ( '  kue  '  ) ;  
const  invoice  =  require ( '  ./invoice  ' ) ;
const  queue  =  kue  。 createQueue () ;

function  startJob  ()   {
让  invoiceData  =  invoice  。 内容 ;
invoiceData  。 forEach ( (  singleInvoice  )   =>  {
//推送队列中的数据
让  job  =  队列 。 创建 ( '  发票 '  ,   {
title  :   `  生成发票 $ {  singleInvoice  。 index  }  `  ,
模板 :   singleInvoice  。 文字 ,
} ) 。 延迟 ( 5000 ) 。 优先级 ( '  高 ' ) 。 save ( (  err  )   =>  {
if ( !  err) {
控制台 。 日志 ( '  工作加...  '  +  工作 。  ID) ;
}
} ) ;
} ) ;
}
startJob  () ;


在此代码中,我们正在读取存储有关PDF文档的信息的文件,对于每个条目,我们在队列中创建一个新作业。

这是我们的Worker.js代码。

const  kue  =  require  ( “  kue  ”  ) ;  
const  queue  =  kue  。 createQueue () ;
const  pdfKit  =  require ( '  pdfkit  ' ) ;
const  fs  =  require ( '  fs  ' ) ;

function  startProcess  ()   {
//听队列
//开始处理电子邮件
队列 。 流程 ( '  invoice  '  ,   (  job  ,  done  )   =>  {
//在每个请求上生成pdf
generatePdfInvoice (作业 。 数据 , 完成) ;
} ) ;
}

function  generatePdfInvoice  (  data  ,  done  )   {
让  doc  =  new  pdfKit  ;
文档 。 管 (FS  。 createWriteStream ( `  $ {  __dirname  }  /发票/  $ { 数据 。 标题 }  .PDF  ` )) ;
文档 。 fontSize ( 14 ) 。 文本 (数据 。 模板 ,   100  ,   100 ) ;
文档 。 结束 () ;
完成 () ;
}

startProcess () ;
KUE  。 app  。 听 ( 4000  ) ;


在此代码中,我们正在听Kue主题即发票,并且在每个请求中,我们正在生成pdf文档。 PDF文档的标题应该是唯一的,因此我们使用索引字段来维护唯一的标题约定。
运行应用程序
要运行应用程序,请首先 使用以下命令 运行 job.js.

$  node  job.js


您应该在终端中看到类似的输出。

使用Nodejs和Kue动态生成PDF文档


现在 使用以下命令 运行 worker.js  .

$  node  worker.js


要验证作业是否已添加到队列,请访问 localhost:4000 以查看队列。

使用Nodejs和Kue动态生成PDF文档


现在要检查PDF文件,打开发票文件夹,您应该看到新的PDF文件。

后续步骤
您可以使用MySQL,MongoDB等数据存储来获取实际数据并动态生成PDF。 您还可以使用Amazon S3存储PDF,而不是将其存储在服务器上。

结束语
我们已经学会了如何使用诸如 Kue之 类的Node和队列系统 来设计和构建系统来动态生成PDF文档。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69933200/viewspace-2650719/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-06-18

  • 博文量
    125
  • 访问量
    129488