dcatAdmin框架 使用phpword 生成word文件

下載phpword插件

composer require phpoffice/phpword

?生成word文件接口

static public function word(){//接收傳值$order_id = request()->get('order_id');$tpl_id = request()->get('tpl_id');//查詢出對應的數據以及關聯數據$sale_order = \App\Models\SaleOrder::with(['customer','items','user.employee','amount'])->where('id',$order_id)->first();//我的模版存儲在一個單獨的表里,查詢出使用的那一個模版文件$modelcontract = ContractTplModel::where('id',$tpl_id)->first();$file = $modelcontract->file;//循環產品數據存入變量中foreach($sale_order->items as $key => $val){$item_data[$key]['id'] = $key+1;$item_data[$key]['item_id'] =  $val->sku_id;$item_data[$key]['goods_name'] = $val->sku->goods_name ?? '';$item_data[$key]['sku_name'] = $val->sku->sku_name ?? '';$item_data[$key]['num'] = $val->should_num ?? '';$item_data[$key]['after_tax_price'] = $val->after_tax_price ?? '';$item_data[$key]['point_price'] = $val->point_price ?? '';$item_data[$key]['point'] = $val->point ?? '';$goods_name[] = $val->sku->goods_name ?? '';}$trade_name = implode("、", array_unique($goods_name));//獲取模版文件完整的路徑$file_path = storage_path('app/public/' . $file);//實例化phpword內置控制器,傳值模版文件路徑(重要,一定要加這一行實例化)$templateProcessor = new TemplateProcessor($file_path);//這里是變量取值,根據自己的數據賦值即可$party_a = $sale_order->customer->name;//甲方名稱$product_name = $trade_name;//產品名稱$total_amount = $sale_order->total_amount ?? ''; //含稅總價$first_price = $total_amount * 0.3;$tow_price = $total_amount * 0.6 - $first_price;
//        dd($after_tax_price,$first_price,$tow_price);$price3 = $total_amount - $first_price - $tow_price;$support = new Support();$total_amount_cn = $support->convertAmountToCn($sale_order->total_amount);//含稅總價大寫$first_price_cn = $support->convertAmountToCn($first_price);$tow_price_cn = $support->convertAmountToCn($tow_price);$price3_cn = $support->convertAmountToCn($price3);$prefix = str_replace('-','','sk'.$sale_order->user->prefix.build_ws_no());//合同前綴//頁面賦值,將頁面上對應的值替換$templateProcessor->setValues(array('合同編號'=>$prefix,'甲方名稱'=>$party_a,'產品名稱'=>$product_name,'含稅總價'=>$sale_order->total_amount,'大寫總價'=>$support->convertAmountToCn($sale_order->total_amount),'三個工作日內百分之'=>30,'第一筆金額'=>$first_price,'第一筆金額大寫'=>$first_price_cn,'一筆貨款發出時間'=>3,'收到貨物工作日'=>2,'收到貨物百分比'=>30,'第二筆金額'=>$tow_price,'第二筆金額大寫'=>$tow_price_cn,'第二筆貨款工作日'=>$tow_price,'第三筆貨款'=>$price3,'第三筆貨款大寫'=>$price3_cn,'乙方收到款項后工作日'=>10,'甲方負責人姓名'=>$sale_order->customer->contacts_name??'','甲方負責人電話'=>$sale_order->customer->contacts_mobile ?? '','乙方負責人姓名'=>$sale_order->user->employee->name ?? '','乙方負責人電話'=>$sale_order->user->employee->mobile ?? '','增值稅專用發票'=> 6 ?? '',));//這里是word模版文件中有表格,情況下的替換,如果你的模版文件沒有表格到這里就不需要了,直接開始寫生成文件即可。if (count($item_data)){$templateProcessor->cloneRow('id',count($item_data));foreach ($item_data as $k =>  $v) {$templateProcessor->setValue('id#'. ($k + 1), $v['id']);$templateProcessor->setValue('goods_name#'. ($k + 1), $v['goods_name']);$templateProcessor->setValue('sku_name#'. ($k + 1), $v['sku_name']);$templateProcessor->setValue('num#' . ($k + 1), $v['num']);$templateProcessor->setValue('after_tax_price#' . ($k + 1), $v['after_tax_price']);$templateProcessor->setValue('point#' . ($k + 1), $v['point']);$templateProcessor->setValue('point_price#' . ($k + 1), $v['point_price']);}}//生成word文件(保存路徑)$templateProcessor->saveAs( storage_path().'/app/public/files/合同.docx');//下載文件$file_path = storage_path().'/app/public/files/合同.docx';  // 文件的路徑和名稱$file_name = basename($file_path);  // 獲取文件名header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=" . $file_name);ob_clean();flush();readfile($file_path);}

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

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

相關文章

Python異步編程之基礎概念

Python異步編程之基礎概念 在現代編程中,異步編程是一種重要的技術,尤其是在處理I/O密集型任務時,異步編程可以大大提高程序的性能和響應速度。本文將介紹Python異步編程的基礎概念,幫助你理解其原理和應用。 什么是異步編程&am…

【代碼隨想錄算法訓練營第37期 第十七天 | LeetCode110.平衡二叉樹、257. 二叉樹的所有路徑、404.左葉子之和】

代碼隨想錄算法訓練營第37期 第十七天 | LeetCode110.平衡二叉樹、257. 二叉樹的所有路徑、404.左葉子之和 一、110.平衡二叉樹 解題代碼C: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *righ…

三、NVIDIA Jetson Orin開發板-GPU加速

一、NVIDIA Jetson Orin開發板的硬件情況 df -h#查看操作系統情況Filesystem Size Used Avail Use% Mounted on **/dev/nvme0n1p1** 234G 17G 208G 8% / none 7.4G 0 7.4G 0% /dev tmpfs 7.6G 0 7.6G 0% /dev/shm tmpfs …

LeetCode 2644.找出可整除性得分最大的整數:暴力模擬(兩層循環)

【LetMeFly】2644.找出可整除性得分最大的整數:暴力模擬(兩層循環) 力扣題目鏈接:https://leetcode.cn/problems/find-the-maximum-divisibility-score/ 給你兩個下標從 0 開始的整數數組 nums 和 divisors 。 divisors[i] 的 …

MySQL庫/表/數據的操作

文章目錄 1.數據庫操作1.1 創建、刪除、查看和修改1.2 編碼格式1.3 備份和恢復 2.表的操作2.1 創建表2.2 存儲引擎2.3 查看表、修改表、刪除表 3.數據類型3.1整數類型3.2字節類型(bit)3.3浮點類型(bit)3.4 decimal3.5 字符串類型3.6 日期和時間類型3.7 enum和set關于如何查找想…

webpack 學習之 五大核心

為什么用 webpack webpack 官網傳送門 … 官網:webpack 是一個用于現代 JavaScript 應用程序的 靜態模塊打包工具。將你項目中所需的每一個模塊組合成一個或多個 bundles,它們均為靜態資源,用于展示你的內容。總結:匯總所有模塊…

Python中別再用 ‘+‘ 拼接字符串了!

大家好,在 Python 編程中,我們常常需要對字符串進行拼接。你可能會自然地想到用 操作符將字符串連接起來,畢竟這看起來簡單明了。 在 Python 中,字符串是不可變的數據類型,這意味著一旦字符串被創建,它就…

【Python】—— lambda表達式

目錄 (一)應用場景 (二)lambda 語法 (三)示例分析 (四)lambda參數形式 4.1 無參數 4.2 一個參數 4.3 默認參數 4.4 可變參數 :*args 4.5 可變參數 :…

【Python爬蟲】案例_github模擬登錄

import requests import re from datetime import datetimedef login():sessionrequests.session()session.headers {User-Agent :XXXX #寫自己的}url1 https://github.com/loginres_1 session.get(url1).content.decode()token re.findall(name"authenticity_token&q…

基于Matlab實現BP神經網絡的手寫數字識別

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 手寫數字識別是計算機視覺和模式識別領域的一個經典問題,具有廣泛的應用場景&…

信息安全從業者書單推薦

作為一名網安人,身上肩負的責任是很大的,能力越大,責任也越大,反過來責任越大,能力也必須跟得上。不管是想進這行,還是已經在這行,持續學習肯定是不能缺少的,除了在工作中積累&#…

qt多語言翻譯不生效的原因

假設您有QT語言家的基礎知識,假設網上那些所有的問題您都已經排查過了,但依然翻譯不生效,那么可以看下這篇帖子,其實就一個問題,變量的生命周期,假設QTranslator是一個函數內的變量,且沒有被聲明…

億圖圖示——刪除水印

一、文件以PPT格式導出 二、點擊水印所在區域,點擊多次delete鍵 三、調整PPT頁面尺寸 四、轉成PDF 五、PDF轉成圖片

Spring的Profile功能及其應用場景

Spring的Profile功能是一種條件化配置機制,它允許開發者根據不同的運行環境或條件來定義和使用不同的bean和配置。Profile功能使得Spring應用程序可以靈活地適應不同的部署場景,而無需修改代碼。 Profile功能的作用: 環境隔離:可…

從0開始寫一個環境保護網站的第3天(JAVAWEB)

1.目標 實現首頁的環境保護原因的查詢,和底部友情連接部分 2.實現 2.1建立數據庫表格(這里數據全是百度查詢) 環境保護原因表: 友情連接表:(數據來源https://zhuanlan.zhihu.com/p/696243646&#xff0…

SqlSession是什么?在MyBatis-Spring中有什么應用?

目錄 一、SqlSession是什么 二、SqlSession在MyBatis中的應用 三、SqlSession在Spring中的應用 一、SqlSession是什么 SqlSession 是 MyBatis 框架中的一個核心概念,它代表與數據庫的一次會話。MyBatis 是一個流行的 Java 持久層框架,用于簡化數據庫…

c++題目_農場和奶牛

𝐵B 頭奶牛 (1≤𝐵≤25000)(1≤B≤25000),有 𝑁(2𝐵≤𝑁≤50000)N(2B≤N≤50000) 個農場,編號 11 到 𝑁N,有 𝑀(𝑁?1≤𝑀≤100000)M(…

【Linux】fork和exec中的信號繼承探索

fork和exec中的信號繼承探索 一、結論二、代碼驗證2.1 代碼編寫2.2 代碼執行 三、linux源碼驗證四、APUE中的驗證五、其他 一、結論 fork時子進程會繼承父進程的信號處理方式,包括父進程設置信號為SIG_DFL或SIG_IGN或捕獲后設置自定義處理函數。exce時子進程會繼承…

ChatGPT寫作指南:掌握5種高效格式成為寫作達人【含實用示例】

1. **簡潔指令** 當任務較簡單時,可以用一小段話來說明,便于理解和執行。如下例: 背景:我負責運營一個旅游主題的社交媒體賬號。 角色:作為一位經驗豐富的文案創作專家,我擅長打造引人注目的旅游內容…

【無標題】亞馬遜5月24日宣布推出2024出口跨境物流加速器計劃

亞馬遜中國5月24日鄭重宣布啟動“2024亞馬遜出口跨境物流加速器計劃”,旨在依托其世界領先的物流網絡和前沿技術,結合本土資源,不斷優化跨境物流服務,以強化中國賣家在跨境物流供應鏈管理方面的能力,進而提升整體效率&…