zoukankan      html  css  js  c++  java
  • 使用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

    大致流程示意

    由于本人能力有限,文章可能有偏差,请批评指出,谢谢!
  • 相关阅读:
    systemmap 使用记录
    reading code record
    吞吐问题
    debug cps 原因
    fopen的a+和rewind
    debug cps && perf debug
    tfo以及quic的阅读笔记
    ss 和netstat
    debug open files
    多核编程 local global
  • 原文地址:https://www.cnblogs.com/haizizhu/p/14811304.html
Copyright © 2011-2022 走看看