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.mzph.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亚马逊出口跨境物流加速器计划”,旨在依托其世界领先的物流网络和前沿技术,结合本土资源,不断优化跨境物流服务,以强化中国卖家在跨境物流供应链管理方面的能力,进而提升整体效率&…