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>