使用puppeteer-renderer生成pdf
主要功能:使用 puppeteer-renderer 抓取页面生成pdf。
我以前也使用过mpdf,实现起来确实有点费时费力,而使用这个组件就比较快乐了。
我这里使用docker安装的服务
docker run -d --name renderer -p 3000:3000 zenato/puppeteer-renderer
使用方式是
直接请求安装服务器对应的3000端口(可以自由设定),例如抓取百度页面生成pdf,直接展示。
安装服务的主机地址 : 对应端口 ? url = 抓取的url页面地址
http://serverHost:3000?url=https://www.baidu.com
如果不想展示直接下载
http://serverHost:3000?type=pdf&url=https://www.baidu.com
当然很多场景下我们是异步生成pdf,然后存储的,我这里使用php抓取对应文件的代码为
/** * 渲染pdf和图片 * @param $api 上面的生成pdf的url带type * @param $filePath 想要存放的位置 * @return bool|false|int * @throws GuzzleException */ public static function creatPDF($api,$filePath){ ini_set('memory_limit', '1000M'); $httpClient = new Client([ 'timeout' => 600 ]); $options['verify'] = false; $data = $httpClient->request('GET', $api, $options); $result = $data->getBody()->getContents(); if($result){ $res = file_put_contents($filePath,$result); var_dump($res); return $res; }else{ var_dump('请求pdf Service 失败!'); return false; } }
注意:当连接中url参数为公网地址时,可直接抓。但是如果内网配置host的指定地址时,需要在启动docker服务时,指定host
docker run -d --name renderer -p 3000:3000 --add-host 抓取页面的URL:抓取页面的IP zenato/puppeteer-renderer
大致流程示意
由于本人能力有限,文章可能有偏差,请批评指出,谢谢!