chrome 访问页面生成pdf下载

chrome 访问页面生成pdf下载

月光魔力鸭

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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
反爬有很多手段,字体反爬就是其中之一。之前一直都是听过,但是却没怎么在实际爬虫中遇到过,最近在一个爬虫题目网站上看到了,试了试,发现还挺麻烦,当然自己从头研究字体肯定麻烦,简单的是模块多的是,选几个就过了。
最开始其实只是网站的一个小改版,导致的需要发送邮件的功能,本身功能不复杂,不做工具的话,几行代码应该就可以搞定的.. 不过后来想想,这个功能应该还是有一定的小需求的,就做成了工具。
之前做了一段时间的上传相关的断点续传和秒传功能,这里整理下大体思路
最近有系统需要知道性能瓶颈,尝试使用jmeter对重要接口进行并发测试,确定能否支撑一定的用户数量。
mysql数据库插入double类型确没有小数点
ffmpeg 采集摄像头进行推流,然后播放,实现直播。
昨天实现一个tabbar的时候发现怎么都无法跳转,直接拿的官方的demo,后来才发现是自定义tabbar的问题。
简单记录下碰到的一个问题,通过jenkins 远程部署springboot+ vue 项目碰到的问题。