node脚本内容:
const puppeteer = require('puppeteer');
const args = require('minimist')(process.argv.slice(2),{number: ["deviceScaleFactor"], boolean: ["displayHeaderFooter"], string: ["url", "fileName", "headerTemplate","footerTemplate","top","bottom","left","right","devices"]});
console.log(args);
(async () => {
const browser = await puppeteer.launch({
args:['--no-sandbox'],
headless: true,
defaultViewport: {
width: args['width'],
height: args['height'],
hasTouch: true,
isMobile: true,
deviceScaleFactor: args['deviceScaleFactor'],
},
});
const page = await browser.newPage();
if(args['devices']!='null'){
await page.emulate(puppeteer.devices[args['devices']]);
}
await page.goto(args['url'], {waitUntil: 'networkidle0'});//固定值
if(args['waitForSelector']!='null'){
await page.waitForSelector(args['waitForSelector']);
}
await page.waitForTimeout(1500);//固定值
await page.pdf({path: args['fileName'], format: 'A4',
displayHeaderFooter : args['displayHeaderFooter'],// 变量
margin: {top: args['top'], bottom: args['bottom'], left: args['left'], right: args['right']},
printBackground: true,//固定值
headerTemplate: args['headerTemplate'],
footerTemplate: args['footerTemplate'],
});
await page.close();
await browser.close();//默认
})();
const express = require('express');
const router = express.Router();
// const {jsPDF} = require("jspdf");
const puppeteer = require('puppeteer');
router.post('/pdfCreate', async function (req, res, next) {
let args = req.body
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(args['url'], {
waitUntil: 'networkidle2',
});
let path = './public/file/hn.pdf'//生成文件的地方
await page.pdf({path, format: 'a4'});
await browser.close();
res.send({
url: '/file/hn.pdf'
})
})
module.exports = router;
https://github.com/simonwoo/disease-report-server
https://juejin.cn/post/6844903865716834318#heading-4
https://www.cnblogs.com/miku561/p/14292064.html