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>
相关推荐
桌面运维家19 小时前
VLAN配置进阶:抑制广播风暴,提升网络效率
开发语言·网络·php
开开心心_Every1 天前
限时免费加密、隐藏、锁定文件文件夹好工具
运维·服务器·人工智能·edge·pdf·逻辑回归·深度优先
不知名的老吴1 天前
PDF神器-PDF Candy v2.89全能PDF工具箱便携版
pdf
luanma1509801 天前
Laravel 4.x:现代PHP框架的奠基之作
开发语言·php·laravel
其实秋天的枫1 天前
2026年新大纲普通话考试真题题库50套【PDF电子版】
经验分享·pdf
PieroPc1 天前
用tkinter 做一个通过 扫描仪硬件 扫描纸质文档的软件 支持pdf
python·pdf·扫描
Sgf2271 天前
第15章 网络编程
开发语言·网络·php
一只会跑会跳会发疯的猴子1 天前
php操作ssl,亲测可用
android·php·ssl
luanma1509801 天前
Laravel 5.x核心特性与升级指南
php·laravel
luanma1509801 天前
Laravel 2.X:现代框架的基石
php·laravel