php数据导出pdf,然后pdf转图片,再推送钉钉群

php 复制代码
public function takePdf($data_plan, $data_act, $file_name, $type)
    {
        $pdf = new \TCPDF('L'); // L - 横向 P-竖向
        // 设置文档信息
        //$file_name = '外协批价单';
        $pdf->SetCreator($file_name);
        $pdf->SetAuthor($file_name);
        $pdf->SetTitle($file_name);
        $pdf->SetSubject($file_name);
        $pdf->SetKeywords('TCPDF, PDF, PHP');
        // 设置页眉和页脚信息
        // 设置页眉和页脚字体
        $pdf->setHeaderFont(['stsongstdlight', '', '9']);
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(true);
        $pdf->setFooterFont(['stsongstdlight', '', '8']);
        // 设置默认等宽字体
        $pdf->SetDefaultMonospacedFont('courier');
        $pdf->setCellPaddings(10, 0, 10, 15);
        // 设置间距
        $pdf->SetMargins(12, 5, 10);//页面间隔
        $pdf->SetHeaderMargin(0);//页眉top间隔
        $pdf->SetFooterMargin(0);//页脚bottom间隔
        // 设置分页
        $pdf->SetAutoPageBreak(true, PDF_MARGIN_BOTTOM);
        // 设置默认字体构造子集模式
        $pdf->setFontSubsetting(true);
        //设置字体 stsongstdlight支持中文
        $pdf->SetFont('stsongstdlight', '', 10);
        ob_clean();

        $view      = \View::make("temp.shipping._explode_pdf", ["data_plan" => $data_plan, 'data_act' => $data_act, "file_name" => $file_name, "from" => $type]);
        $html      = $view->render();
        $html      = preg_replace("/\s\s+/", '', $html);
        $pdf->AddPage();
        $pdf->writeHTML($html, true, false, true, false, '');

        $pageW = $pdf->getPageWidth();
        // 添加图片水印
        $image_file = 'passed.png'; // 图片路径
        //$pdf->Image($image_file, $pageW-35, 0, 35, 35, 'PNG', '', 'T', false, 300);
        // 参数解释:图片路径,x坐标,y坐标,宽度,高度,图片类型,链接,对齐方式,是否重新取样,dpi,角度,是否为模板使用,是否使用mask,角度,是否显示边框,是否在背景图像上显示文本,是否在文本上显示背景图像
        ob_clean();

        //输出PDF
        $path = public_path('uploads/');
        $file_path = $path . 'shipping/' . date("Y-m-d")."/";
        if (!is_dir($file_path)) {
            mkdir($file_path, 0777, true);
        }
        $fileName = 'sp_'.date("YmdHis") . time();
        $file_path .= $fileName.".pdf";
        $pdf->Output($file_path, 'F');//I输出、D下载
        return ['fileName'=>$fileName,'filePath'=>$file_path];
    }
    /**
     * 将pdf文件转化为多张png图片
     */
    public function embroideryCheckToPng($pdfRes)
    {
        $imagick = new \Imagick();
        // 设置 PDF 分辨率,值越大图片越清晰,但处理时间和内存占用也会增加
        $imagick->setResolution(300, 300);
        // 读取 PDF 文件
        //$filePath = './uploads/shipping/2025-05-12/sp_202505121347381747028858.pdf';
        $imagick->readImage($pdfRes['filePath']);
        // 遍历 PDF 的每一页并转换为图片
        foreach ($imagick as $key => $page) {
            // 设置图片格式为 JPEG
            $page->setImageFormat('jpeg');
            $page->setBackgroundColor("green");

            $page->setImageAlphaChannel(\Imagick::ALPHACHANNEL_REMOVE);

            // 设置图片质量,范围从 0 到 100,值越大质量越高
            $page->setImageCompressionQuality(80);
            // 保存图片
            if (!is_dir($_SERVER['DOCUMENT_ROOT'] . '/uploads/shipping/image/' . date("Y-m-d"))) {
                mkdir($_SERVER['DOCUMENT_ROOT'] . '/uploads/shipping/image/' . date("Y-m-d"), 0777, true);
            }
            $fileName = 'uploads/shipping/image/' . date("Y-m-d") . '/'.$pdfRes['fileName']. '.jpg';
            $page->writeImage($_SERVER['DOCUMENT_ROOT'].$fileName);

        }
        // 销毁 Imagick 对象,释放资源
        $imagick->destroy();
        return $_SERVER['DOCUMENT_ROOT'].$fileName ?? null;
    }
    /**
     * 推群
     */
    public function pushDingChat($image_path,$chatid)
    {
        $ding = new Dingd();
        $dingRes = $ding->media_curl($image_path);
        $send_data = [
            'chatid'   => $chatid,
            "msg" => [
                'msgtype' => 'image',
                'image' => [
                    "media_id" => $dingRes['media_id'],
                ],
            ]
        ];
        \Illuminate\Support\Facades\Log::channel('shipping')->info("【出货管理-出货群】" . jsonEncode($send_data));
        $res = $ding->send_msg($send_data);
        \Illuminate\Support\Facades\Log::channel('shipping')->info("【出货管理-出货群】".  jsonEncode($res));
        return $res;
    }

pdf文件:

php 复制代码
<style>
    .table th,.table td{padding: 5px}
    /*table td{ height:30px; border: 1px solid;color: black}*/
    .tdcen /*设置表格文字左右和上下居中对齐*/
    {
      text-align: center;
      vertical-align: middle !important;
    }
    .head_th{
        background-color: #addcff;
        color: black;
        font-size: 13px;
        text-align: center;
    }
    .head_th_act{
        background-color: #d4ffe0;
        color: black;
        font-size: 13px;
        text-align: center;
    }
    .head_th_td{
        color: black;
        font-size: 12px;
        text-align: center;
        height: 25px;
        line-height: 35px;
        border-bottom: 1px dashed #ccc;
    }
</style>
<template>
    <table cellpadding="1"  style="">
        <thead>
        </thead>
        <tbody>
            <tr>
                <td colspan="9" style="font-size: 25px;color: #796f53;font-weight: bold;text-align: center;">
                    <div>{{ $file_name }}</div>
                </td>
            </tr>
        </tbody>
    </table>
    {{--出货计划提交--}}
    <table class="table table-bordered" cellpadding="2"  style="border:1px solid #ccc;margin-top: 20px;">
        <thead>
        </thead>
        <tbody>
            <tr style="padding:1rem;">
                <td class="head_th">序号</td>
                <td class="head_th">客户</td>
                <td class="head_th">装车日期</td>
                <td class="head_th">运输方式</td>
                <td class="head_th">箱数</td>
                <td class="head_th">体积</td>
                <td class="head_th">目的仓库</td>
                <td class="head_th">运输公司</td>
                <td class="head_th">备注</td>
            </tr>
            @foreach($data_plan['list'] as $key => $v)
                <tr>
                    <td class="head_th_td">{{$key+1}}</td>
                    <td class="head_th_td">{{$v['client_name']}}</td>
                    <td class="head_th_td">{{$v['shipping_date']}}</td>
                    <td class="head_th_td">{{$v['transportation_name']}}</td>
                    <td class="head_th_td">{{$v['packs']}}</td>
                    <td class="head_th_td">{{$v['volume']}}</td>
                    <td class="head_th_td">{{$v['destination_git']}}</td>
                    <td class="head_th_td">{{$v['transport_name']}}</td>
                    <td class="head_th_td">{{$v['remark']}}</td>
                </tr>
            @endforeach
        </tbody>
    </table>
    <table cellpadding="1"  style="border: 1px solid #ccc;">
        <tbody>
        <tr>
            <td style="font-size: 12px;background-color: #addcff;color: black;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;" colspan="4">合计</td>
            <td style="font-size: 12px;background-color: #addcff;color: black;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;">{{$data_plan['total_packs']}}</td>
            <td style="font-size: 12px;background-color: #addcff;color: black;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;">{{$data_plan['total_volume']}}</td>
        </tr>
        </tbody>
    </table>
    {{--实际出货提交--}}
    @if(isset($from) && $from == 2)
        <table class="table table-bordered" cellpadding="2"  style="border:1px solid #ccc;margin-top: 20px;">
            <thead>
            </thead>
            <tbody>
                <tr style="padding:1rem;">
                    <td class="head_th_act">序号</td>
                    <td class="head_th_act">客户</td>
                    <td class="head_th_act">装车日期</td>
                    <td class="head_th_act">具体时间</td>
                    <td class="head_th_act">箱数</td>
                    <td class="head_th_act">体积</td>
                    <td class="head_th_act">车牌</td>
                    <td class="head_th_act">目的仓库</td>
                    <td class="head_th_act">运输公司</td>
                    <td class="head_th_act">备注</td>
                </tr>
            @foreach($data_act['list'] as $key => $v)
                <tr>
                    <td class="head_th_td">{{$key+1}}</td>
                    <td class="head_th_td">{{$v['client_name']}}</td>
                    <td class="head_th_td">{{$v['shipping_date']}}</td>
                    <td class="head_th_td">{{$v['shipping_date_time']}}</td>
                    <td class="head_th_td">{{$v['packs']}}</td>
                    <td class="head_th_td">{{$v['volume']}}</td>
                    <td class="head_th_td">{{$v['license_plate_num']}}</td>
                    <td class="head_th_td">{{$v['destination_git']}}</td>
                    <td class="head_th_td">{{$v['transport_name']}}</td>
                    <td class="head_th_td">{{$v['remark']}}</td>
                </tr>
            @endforeach
            </tbody>
        </table>
        <table cellpadding="1"  style="border: 1px solid #ccc;">
            <tbody>
            <tr>
                <td style="font-size: 12px;background-color: #d4ffe0;color: black;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;" colspan="4">已出货合计</td>
                <td style="font-size: 12px;background-color: #d4ffe0;color: black;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;">{{$data_act['total_packs']}}</td>
                <td style="font-size: 12px;background-color: #d4ffe0;color: black;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;">{{$data_act['total_volume']}}</td>
            </tr>
            <tr>
                <td style="font-size: 12px;background-color: #fff0e2;color: #ff5473;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;" colspan="4">未出货合计</td>
                <td style="font-size: 12px;background-color: #fff0e2;color: #ff5473;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;">{{$data_act['diff_packs']}}</td>
                <td style="font-size: 12px;background-color: #fff0e2;color: #ff5473;height: 30px;text-align: center;vertical-align: middle;line-height: 40px;letter-spacing:2px;">{{$data_act['diff_volume']}}</td>
            </tr>
            </tbody>
        </table>
    @endif
</template>
相关推荐
邪恶的贝利亚2 小时前
《ffplay 读线程与解码线程分析:从初始化到 seek 操作,对比视频与音频解码的差异》
ffmpeg·php·音视频
廖圣平3 小时前
美团核销 第三方接口供应商 (含接口文档)
开发语言·数据库·php
sunsineq3 小时前
[超级简单]讲解如何用PHP实现LINE Pay API!
开发语言·php·linepay
上海合宙LuatOS3 小时前
全栈工程师实战手册:LuatOS日志系统开发指南!
java·开发语言·单片机·嵌入式硬件·物联网·php·硬件工程
琉璃℡初雪6 小时前
vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件
vue.js·pdf·excel
z日火6 小时前
集成钉钉消息推送功能
钉钉·消息推送
小诸葛的博客7 小时前
Flannel UDP 模式的优缺点
网络协议·udp·php
桃子酱紫君9 小时前
华为配置篇-RSTP/MSTP实验
开发语言·华为·php
一个懒鬼9 小时前
Edge浏览器打开PDF文件显示空白(每次需要等上一会)
windows·pdf