php數據導出pdf,然后pdf轉圖片,再推送釘釘群

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>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81191.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每日算法-250513

每日算法 - 2024-05-13 記錄今天學習的算法題解。 2335. 裝滿杯子需要的最短總時長 題目 思路 貪心 這道題的關鍵在于每次操作盡可能多地減少杯子的數量。我們每次操作可以裝一杯或兩杯&#xff08;不同類型&#xff09;。為了最小化總時間&#xff0c;應該優先選擇裝兩杯不同…

城市生命線綜合管控系統解決方案-守護城市生命線安全

一、政策背景 國務院辦公廳《城市安全風險綜合監測預警平臺建設指南》?要求&#xff1a;將燃氣、供水、排水、橋梁、熱力、綜合管廊等納入城市生命線監測體系&#xff0c;建立"能監測、會預警、快處置"的智慧化防控機制。住建部?《"十四五"全國城市基礎…

分布式AI推理的成功之道

隨著AI模型逐漸成為企業運營的核心支柱&#xff0c;實時推理已成為推動這一轉型的關鍵引擎。市場對即時、可決策的AI洞察需求激增&#xff0c;而AI代理——正迅速成為推理技術的前沿——即將迎來爆發式普及。德勤預測&#xff0c;到2027年&#xff0c;超半數采用生成式AI的企業…

auto.js面試題及答案

以下是常見的 Auto.js 面試題及參考答案&#xff0c;涵蓋基礎知識、腳本編寫、運行機制、權限、安全等方面&#xff0c;適合開發崗位的技術面試準備&#xff1a; 一、基礎類問題 什么是 Auto.js&#xff1f;它的主要用途是什么&#xff1f; 答案&#xff1a; Auto.js 是一個…

C語言中的指定初始化器

什么是指定初始化器? C99標準引入了一種更靈活、直觀的初始化語法——指定初始化器(designated initializer), 可以在初始化列表中直接引用結構體或聯合體成員名稱的語法。通過這種方式,我們可以跳過某些不需要初始化的成員,并且可以以任意順序對特定成員進行初始化。這…

高德地圖在Vue3中的使用方法

1.地圖初始化 容器創建&#xff1a;通過 <div> 標簽定義地圖掛載點。 <div id"container" style"height: 300px; width: 100%; margin-top: 10px;"></div> 密鑰配置&#xff1a;綁定高德地圖安全密鑰&#xff0c;確保 API 合法調用。 參…

RabbitMQ發布訂閱模式深度解析與實踐指南

目錄 RabbitMQ發布訂閱模式深度解析與實踐指南1. 發布訂閱模式核心原理1.1 消息分發模型1.2 核心組件對比 2. 交換機類型詳解2.1 交換機類型矩陣2.2 消息生命周期 3. 案例分析與實現案例1&#xff1a;基礎廣播消息系統案例2&#xff1a;分級日志處理系統案例3&#xff1a;分布式…

中小型培訓機構都用什么教務管理系統?

在教育培訓行業快速發展的今天&#xff0c;中小型培訓機構面臨著學員管理復雜、課程體系多樣化、教學效果難以量化等挑戰。一個高效的教務管理系統已成為機構運營的核心支撐。本文將深入分析當前市場上適用于中小型培訓機構的教務管理系統&#xff0c;重點介紹愛耕云這一專業解…

C++虛函數食用筆記

虛函數定義與作用&#xff1a; virtual關鍵字聲明虛函數&#xff0c;虛函數可被派生類override(保證返回類型與參數列表&#xff0c;名字均相同&#xff09;&#xff0c;從而通過基類指針調用時&#xff0c;實現多態的功能 virtual關鍵字: 將函數聲明為虛函數 override關鍵…

運算放大器相關的電路

1運算放大器介紹 解釋&#xff1a;運算放大器本質就是一個放大倍數很大的元件&#xff0c;就如上圖公式所示 Vp和Vn相差很小但是放大后輸出還是會很大。 運算放大器不止上面的三個引腳&#xff0c;他需要獨立供電&#xff1b; 如圖比較器&#xff1a; 解釋&#xff1a;Vp&…

華為OD機試真題——通信系統策略調度(用戶調度問題)(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

Ubuntu 系統默認已安裝 python,此處只需添加一個超鏈接即可

步驟 1&#xff1a;確認 Python 3 的安裝路徑 查看當前 Python 3 的路徑&#xff1a; which python3 輸出類似&#xff1a; /usr/bin/python3 步驟 2&#xff1a;創建符號鏈接 使用 ln -s 創建符號鏈接&#xff0c;將 python 指向 python3&#xff1a; sudo ln -s /usr/b…

深度學習-分布式訓練機制

1、分布式訓練時&#xff0c;包括train.py的全部的代碼都會在每個gpu上運行嗎&#xff1f; 在分布式訓練&#xff08;如使用 PyTorch 的 DistributedDataParallel&#xff0c;DDP&#xff09;時&#xff0c;每個 GPU 上運行的進程會執行 train.py 的全部代碼&#xff0c;但通過…

yarn的介紹

### Yarn 的基本概念 Yarn 是 Hadoop 生態系統中的一個重要組成部分&#xff0c;它是一種分布式資源管理框架&#xff0c;旨在為大規模數據處理提供高效的資源管理和調度能力。以下是關于 Yarn 的一些核心概念&#xff1a; #### 1. **Yarn 的定義** Yarn 是一個資源調度平臺&a…

Spring-messaging-MessageHandler接口實現類ServiceActivatingHandler

ServiceActivatingHandler實現了MessageHandler接口&#xff0c;所以它是一個MessageHandler&#xff0c;在spring-integration中&#xff0c;它也叫做服務激活器&#xff08;Service Activitor&#xff09;&#xff0c;因為這個類是依賴spring容器BeanFactory的&#xff0c;所…

快速入門深度學習系列(2)----損失函數、邏輯回歸、向量化

針對深度學習入門新手目標不明確 知識體系雜亂的問題 擬開啟快速入門深度學習系列文章的創作 旨在幫助大家快速的入門深度學習 寫在前面&#xff1a; 本系列按照吳恩達系列課程順序發布(說明一下為什么不直接看原筆記 因為內容太多 沒有大量時間去閱讀 所有作者需要一次梳理…

KingBase問題篇

安裝環境 操作系統&#xff1a;CentOS7 CPU&#xff1a;X86_64架構 數據庫&#xff1a;KingbaseES_V008R006C009B0014_Lin64_install.iso 項目中遇到的問題 Q1. 執行sql中有字符串常量&#xff0c;且用雙引號包裹&#xff0c;執行報錯 A1. 默認KingBase不認雙引號&#xff0…

瀕危仙草的重生敘事:九仙尊米斛花節如何以雅集重構中醫藥文化IP

五月的霍山深處,層巒疊翠之間,中華仙草霍山米斛迎來一年一度的花期。九仙尊以“斛韻雅集,春野茶會”為主題,舉辦為期半月的米斛花文化節,融合中醫藥文化、東方美學與自然體驗,打造一場跨越古今的沉浸式文化盛宴。活動涵蓋古琴雅集、書法創作、茶道冥想、詩歌吟誦、民族歌舞等多…

LeetCode100.1 兩數之和

今天晚上看了許多關于未來計算機就業的視頻&#xff0c;有種正被販賣焦慮的感覺&#xff0c;翻來覆去下決定先做一遍leetcode100給自己降降溫&#xff0c;打算每周做四題&#xff0c;盡量嘗試不同的方法與不同的語言。 一開始想到的是暴力解法&#xff0c;兩層循環。數據量為1e…

python制造一個報錯

以下是用Python制造常見錯誤的示例及解析&#xff0c;涵蓋不同錯誤類型&#xff0c;便于理解調試原理&#xff1a; 一、語法錯誤 (SyntaxError) # 錯誤1&#xff1a;缺少冒號 if Trueprint("這行不會執行")# 錯誤2&#xff1a;縮進錯誤 def func(): print("未對…