使用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

 

大致流程示意

 

posted @ 2021-05-25 22:41  隆冬之夜99  阅读(392)  评论(1编辑  收藏  举报