chrome 访问页面生成pdf下载

chrome 访问页面生成pdf下载

月光魔力鸭

2019-06-17 19:41 阅读 460 喜欢 0 chrome pdf nodejs

功能来源于客户需求。客户有需求想把班级内所有学生的错题本生成pdf文档下载下来... 目前没有做这个功能,只有页面,还好chrome浏览器有保存pdf的功能,但是一想到这么多的学生,这么多的学科、以及这么多的参数...

还是自动的好.

步骤

就是这么简单,至于puppeteer 是个啥.. 想知道的可以去百度,其实就是chrome的浏览器内核。

准备工作

puppeteer的安装

这里简单带一嘴安装,之前安装都是用puppeteer-core ,因为浏览器好大,有200多M,不想下载,自己又有安装的,这里提供下不用下载就可以安装puppeteer的记录。

npm config set puppeteer_skip_chromium_download = 1

设置好后,就可以npm install puppeteer 啦,记得使用的时候指定下本地chrome的地址哦。

开始代码啦

var puppeteer = require('puppeteer');

var {URL,URLSearchParams} = require('url');

var async = require('async');

async function createPdf(pageUrl,cb,folderName){
    let urlObj = new URL(pageUrl);
    let className = urlObj.searchParams.get('className');
    let realName = urlObj.searchParams.get('realName');
    let subjectId = urlObj.searchParams.get('subjectId');
    console.log(pageUrl);
    const browser = await puppeteer.launch({
//指定本地chrome地址
        executablePath : 'C:/Users/Administrator/AppData/Local/Google/Chrome/Application/chrome.exe'
    });
    const page = await browser.newPage();
    await page.goto(pageUrl, {waitUntil: 'networkidle2'});
    await page.waitFor(5000);
    await page.emulateMedia('screen');
    await page.pdf({
        path: `./pdf/${folderName}/${className}-${realName}-错题本.pdf`, 
        format: 'A4',
        printBackground : true
    });

    await browser.close();

    cb();
}


function start (urljson,folderName,callback){

    async.mapLimit(urljson,1,function(item,cb){
        createPdf(item,cb,folderName);
    },function(){
        console.log('over')
        callback();
    })
}

module.exports = start;

别的不说,就单说时间,最起码得省下了好几个小时.. 关键是手动点还累啊

转载请注明出处: https://chrunlee.cn/article/chrome-nodejs-pdf.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
与python后端进行联调,后端协议为jsonrpc ,这里简单记录下jsonrpc的通用请求函数,并附带几个栗子
BUG 报错Tainted canvases may not be exported 。 在通过canvas 调用 toDataURL的时候出现的问题。
最近在做直播,是用的webrtc,然后找的免费的starrtc ,当然,可能由于种种原因吧.. 用起来并没有特别顺畅,后续还希望能够深入这部分,从现在开始学习..当然,websocket 是顺带的,可以用来发消息什么的肯定也是要用到的。
上一张中已经完成了比较简易的3D全景浏览,但是...这是写死在xml中的,对于我们实际的项目,这种情况是不可能适应的。所以,来了解下如何动态加载xml已经设置对应的热点。
前一阵子做了个图床,可以粘贴上传,查看服务器上的文件... 但是自己的服务器总是有问题..空间还小,就怕哪天没钱续费了。同事昨天想要一个七牛的图床,在网上找了下,只找到了 qiniu upload files插件,自己使用了下,挺好用,但是没有复制粘贴
本来是想做一个图床,然后在chrome扩展中添加上,但是发现chrome的扩展有点毫无头绪,只能从头练习,从头学了。
通过frp做穿透实现https 访问本地http项目。
chrome 如何查看placeholder样式以及其他伪类样式