chrome 访问页面生成pdf下载

chrome 访问页面生成pdf下载

月光魔力鸭

2019-06-17 19:41 阅读 869 喜欢 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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
本来是想做一个图床,然后在chrome扩展中添加上,但是发现chrome的扩展有点毫无头绪,只能从头练习,从头学了。
在程序中,会有需要后台一直运行的场景。这一节我们来做一个监控某网站的运行状态,如果没有运行,则改变当前的图标。
mysql数据库插入double类型确没有小数点
需求:可能会有在页面加载的时候想执行某个js,例如统计页面的DOM等等。
昨天实现一个tabbar的时候发现怎么都无法跳转,直接拿的官方的demo,后来才发现是自定义tabbar的问题。
很久之前学习chrome扩展插件的时候已经做过一个了,好久没咋用,最近又跑了一个存储服务,准备在配合这个服务做个图床,以后就用这个了,之前的服务器到期忘了迁移数据都没了,这次换了服务器,在家里了,估计以后不会再做了吧,这个算是最后一个了,有啥问题就在这个进行优化了。
最近在做直播,是用的webrtc,然后找的免费的starrtc ,当然,可能由于种种原因吧.. 用起来并没有特别顺畅,后续还希望能够深入这部分,从现在开始学习..当然,websocket 是顺带的,可以用来发消息什么的肯定也是要用到的。
最开始其实只是网站的一个小改版,导致的需要发送邮件的功能,本身功能不复杂,不做工具的话,几行代码应该就可以搞定的.. 不过后来想想,这个功能应该还是有一定的小需求的,就做成了工具。