NodeJS + Express HTML转PDF功能

NodeJS + Express HTML转PDF功能

基于node.js express框架,借助html-pdf中间件,我们可以实现一个html转pdf功能。

下面将利用node.js express框架实现一个文件上传和html转pdf功能,将上传的文件储存在项目下的tmp文件夹中,并且上传的html文件转换为pdf文件:

1、使用html-pdf中间件实现

html-pdf中间件是用来处理html转pdf转换.

安装文件上传所需模块:npm install html-pdf

参考文件上传地址:NodeJS+Express 文件上传功能 

参考文档地址:html-pdf 开源地址

在index.js 编写html转pdf 功能接口:

var express = require('express');
var app = express();
const fs = require('fs')
const pathLib = require('path')
// 引入body-parser中间件,用来处理post请求体body中的数据
const bodyParser = require('body-parser')
// 引入multer中间件,用于处理上传的文件数据
const multer = require('multer')
// 引入html-pdf 中间件,用户处理html文件转pdf文件
const pdf = require('html-pdf');
// html-pdf 转换参数配置
const options = { format: 'Letter' };

const server = app.listen(3000, function(){
  console.log('express + multer 实现文件上传')
})

app.get('/', function(res, rep) {
    rep.send('Hello, word!');
});

// 读取静态资源
app.use(express.static('public'))
// 通过配置multer的dest属性, 将文件储存在项目下的tmp文件中
app.use(multer({ dest: './tmp/' }).any())

// 访问index.html页面
app.get('/index.html', function(req, res){
  // 将public下的index.html文件返回去
  res.sendFile(__dirname + '/index.html')
})

// 文件上传接口
app.post('/fileUpload', function(req, res){
  // 上传的文件在req.files中
  const filename = req.files[0].path + pathLib.parse(req.files[0].originalname).ext
  console.log(filename);
  fs.rename(req.files[0].path, filename, function(err){
    if(err){
      res.send(err)
    }else{
	  // HTML 文件转pdf
	  var html = fs.readFileSync(filename, 'utf8');
	  pdf.create(html, options).toFile('./tmp/businesscard.pdf', function(err, res) {
			if (err) {
				console.log(res);
			} else {
				console.log(res); // { filename: '/app/businesscard.pdf' }
				
			}
		});
     res.send('upload successfully')
    }
  })
})

注意:引用html-pdf 模块和html-pdf 常量定义转换

// 引入html-pdf 中间件,用户处理html文件转pdf文件
const pdf = require('html-pdf');
// html-pdf 转换参数配置
const options = { format: 'Letter' };

转换核心功能代码:

// HTML 文件转pdf
	  var html = fs.readFileSync(filename, 'utf8');
	  pdf.create(html, options).toFile('./tmp/businesscard.pdf', function(err, res) {
			if (err) {
				console.log(res);
			} else {
				console.log(res); // { filename: '/app/businesscard.pdf' }
				
			}
		});

效果展示:

控制台结果输出:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值