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>
相关推荐
ServBay1 小时前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954483 小时前
CTF 伪协议
php
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php