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' }
}
});
效果展示:
控制台结果输出: