chrome 访问页面生成pdf下载

chrome 访问页面生成pdf下载

月光魔力鸭

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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
BUG 报错Tainted canvases may not be exported 。 在通过canvas 调用 toDataURL的时候出现的问题。
mysql数据库插入double类型确没有小数点
扩展程序中会有需要请求外部接口获取数据的时候,如果直接在JS中写的话,会跨域,但是谷歌扩展程序支持这种情况,只需要配置一下即可。
昨天客户发现了个小BUG,文章发布使用的ueditor, 上传视频的时候当时好好的,后来怎么就是播放不了?
最近有个小功能需要一些基础数据,找了一下在小程序上有发现,暂时还没找到他的网站,想着把这些数据爬一些下来做为基础数据使用的。本来还想着直接反编译小程序的,没想到微信变更了加密方式,以前反编译的路子走不通了。
反爬有很多手段,字体反爬就是其中之一。之前一直都是听过,但是却没怎么在实际爬虫中遇到过,最近在一个爬虫题目网站上看到了,试了试,发现还挺麻烦,当然自己从头研究字体肯定麻烦,简单的是模块多的是,选几个就过了。
本篇文章以一个实际的小项目为主题进行从头到尾的讲解实现,该项目总计开发时长约6小时,主要是有很多页面或功能都是现成的,直接复制过来的,剩下的就调整下样式、字段内容等。
之前做了一段时间的上传相关的断点续传和秒传功能,这里整理下大体思路