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>
相关推荐
两个人的幸福5 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo8 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack8 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982078 天前
PHP 扩展——从入门到理解
php
鹏仔先生9 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下9 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip9 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
weixin_397574099 天前
PDF复杂表格的1:1还原引擎:跨页表格自动拼接技术实战
大数据·人工智能·pdf
Metaphor6929 天前
使用 Python 将 PDF 转换为 HTML
python·pdf·html
2601_961845159 天前
粉笔行测5000题电子版|pdf|解析
pdf·新媒体运营·github·个人开发·内容运营·规格说明书·极限编程