chrome 访问页面生成pdf下载

chrome 访问页面生成pdf下载

月光魔力鸭

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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
最近有一个任务一直在占满cpu, 总是会让我的服务器宕机,可是还得跑,想来想去想到了docker,印象中可以对cpu进行限制,这里简单记录下过程。
登录方式现在非常多,不过像我这种小站让用户自己注册基本是不可能的了,只能依赖现有的第三方的登录来集成,之前有集成github,不过这个太过针对性,这里准备集成QQ互联登录,慢慢记录下。
最近有系统需要知道性能瓶颈,尝试使用jmeter对重要接口进行并发测试,确定能否支撑一定的用户数量。
前一阵子做了个图床,可以粘贴上传,查看服务器上的文件... 但是自己的服务器总是有问题..空间还小,就怕哪天没钱续费了。同事昨天想要一个七牛的图床,在网上找了下,只找到了 qiniu upload files插件,自己使用了下,挺好用,但是没有复制粘贴
浏览网页的时候经常会有文本无法选中,无法复制的情况,这里简单说个简单的方法,不需要下载什么东西,也不用安装什么软件、插件、油猴啥的都不需要。
最开始其实只是网站的一个小改版,导致的需要发送邮件的功能,本身功能不复杂,不做工具的话,几行代码应该就可以搞定的.. 不过后来想想,这个功能应该还是有一定的小需求的,就做成了工具。
最近先研究下jenkins远程部署,在自己服务器上跑一个先,简单记录下碰到的问题。
小程序需要用到用户的手机号码,看了下API 以及相关的demo,基本都是服务端进行解密的,问题是需要的参数并没有用到secret,只需要 session_key / iv /encryptedData 即可,那完全可以在客户端进行处理啊。