干撸一个Node环境的PDF生成服务

用到的库

  • express:Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。许多流行的开发框架都基于 Express 构建。
  • jimp:是一个使用 JavaScript 编写的用于 Node的图像处理库,具有零依赖的特性。
  • pdfkit:PDFKit是一个用于Node和浏览器的PDF文档生成库,它可以轻松创建复杂的、多页的PDF文档。该API既包括低层函数,也包括高层功能的抽象,PDFKit API被设计得很简单,生成复杂的文档就像调用几个函数一样简单(浏览器端的PDF生成与展示建议使用JSPDF)。

介绍

公司的远程问诊项目需要做一个PDF处方生成的功能,后端是使用JAVA写的,本身JAVA有很多优秀的PDF生成库例如:PDFBoxpdfjetOpenPDFitext-7-core,但是要么收费,要么功能不全,要么版本太低(OpenPDF是一个基于iText4的开源免费的分支),经过比较发现pdfkit的API和文档比较完整,pdfkit有一个很有吸引力的功能是自动排盘和文字自动换行自动隐藏。

代码片段

Http请求处理

const express = require('express');
const app = express()
app.post('/createPdfByJson', (req, res,next) => {
   
    if (req.method == 'POST') {
   
        let postData = "";
        req.on('data', function (chuck) {
   
            postData += chuck;
        });
        req.on('end', function () {
   
            // 处理参数转换
            let _postData = JSON.parse(postData);
            let _recipe = _postData.recipe;
            _recipe.medicines = _postData.recipeMedicineList;
            _recipe.createTime = new Date(_recipe.createTime);
            // 生成PDF文件
            console.log("生成处方:"+JSON.stringify(_recipe));
            pdf.createPdf(_recipe, function (data) {
   
                res.statusCode = 200
                res.setHeader('Content-Type', 'application/json')
                res.end(JSON.stringify(data))
            });
        });
    }
});

生成PDF

样式展示

在这里插入图片描述

签名图片处理

/**
 * 下载文件
 * @param {文件地址}} url 
 */
function download(url) {
   
  return new Promise(function (resolve, reject) {
   
    https.get(new URL(url).href, (res) => {
   
      let bufferArray = new Array();
      res.on('data', (d) => {
   
        bufferArray.push(d);
      });
      res.on('end', () => {
   
        let imgBuffer = Buffer.concat(bufferArray);
        var ab = new ArrayBuffer(imgBuffer.length);
        var view = new Uint8Array(ab);
        for (var i = 0; i < imgBuffer.length; ++i) {
   
          view[i] = imgBuffer[i];
        }
        resolve(ab);
      });
      res.on('error', (error) => {
   
        reject(error);
      });
    });
  });
}

/**
 * 下载图像并旋转图像
 * @param {地址}} url 
 */
function downloadImagRotate(url,rotate) {
   
  return new Promise(function (resolve, reject) {
   
  	// URL用来做url的转义,因为传过来的地址不一定是合规的例如带有中文
    https.get
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值