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文件:
<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>