最近在开发有关考试试卷相关的内容,需要生成试卷的word文档并下载。

这里用到了phpoffice/phpword插件,这里记录下一些开发过程中注意的点。

1.安装phpoffice/phpword

composer require phpoffice/phpword

2.准备一个word模板方便向其中写入需要生成的内容

在这里插入图片描述

在这里插入图片描述

3.编写生成word的方法

<?php
use PhpOffice\PhpWord\Element\Table;
use PhpOffice\PhpWord\TemplateProcessor;class PaperLogic extends Logic
{// 下载试卷public function downloadPaper(array $papdfInfo){$baseData = [];// 获取试卷模板$templatePath = resource_path('template/paper/试卷模板.docx');$baseData['paper_name'] = $paperInfo['name'];$baseData['paper_topic_num'] = $paperInfo['topic_num'];$baseData['paper_num'] = $paperInfo['num'];$baseData['paper_score'] = $paperInfo['score'];$templateProcessor = new TemplateProcessor($templatePath);// 把基础信息渲染到试卷模板中$templateProcessor->setValues($baseData);// 这里处理的是试题相关内容$topic_list = $paperInfo['topic_list'];foreach ($topic_list as $key => $val) {$question_list = $val['question_list']->toArray();foreach ($question_list as $k => $v) {$option_arr = [];if (in_array($v['type'], ['1', '2', '3'])) {foreach ($v['option'] as $d) {$option_arr[] = $d['key'] . ':' . $d['label'];}}$v['option_arr'] = $option_arr;$v['answer'] = implode('、', $v['answer']);$question_list[$k] = $v;}$val['question_list'] = $question_list;$topic_list[$key] = $val;}$table = new Table(['borderSize' => 10,// 'borderColor' => '000000', // 默认黑色'borderColor' => 'FFFFFF', // 白色'unit' => 'nil',]);// 注意word模板中的文字换行为<w:br/>foreach ($topic_list as $k => $v) {$table->addRow();if ($v['describe']) {$table->addCell(10870, ['valign' => 'center'])->addText($v['name'] . '(' . $v['describe'] . ')', null, ['align' => 'left']);} else {$table->addCell(10870, ['valign' => 'center'])->addText($v['name'], null, ['align' => 'left']);}foreach ($v['question_list'] as $b) {$table->addRow();$table->addCell(10870, ['valign' => 'center'])->addText($b['index'] . '.' . $b['name'] . '   【' . $b['type_text'] . '】   ' . '(' . $b['score'] . '分)', null, ['align' => 'left']);$table->addRow();if (in_array($b['type'], ['1', '2'])) {$b['option_str'] = implode('<w:br/>', $b['option_arr']);$table->addCell(10870, ['valign' => 'center'])->addText($b['option_str'], null, ['align' => 'left']);$table->addRow();$table->addCell(10870, ['valign' => 'center'])->addText("正确选项:" . $b['answer_key'] . "<w:br/>正确答案:" . $b['answer'] . "<w:br/>答案解析:" . $b['analysis'], null, ['align' => 'left']);} else if ($b['type'] == '3') {$b['option_str'] = implode('<w:br/>', $b['option_arr']);$table->addCell(10870, ['valign' => 'center'])->addText($b['option_str'], null, ['align' => 'left']);$table->addRow();$table->addCell(10870, ['valign' => 'center'])->addText("正确答案:" . $b['answer'] . "<w:br/>答案解析:" . $b['analysis'], null, ['align' => 'left']);} else if ($b['type'] == '4') {$b['answer'] = str_replace('&', '或', $b['answer']);$table->addCell(10870, ['valign' => 'center'])->addText("正确答案:" . $b['answer'] . "<w:br/>答案解析:" . $b['analysis'], null, ['align' => 'left']);} else if ($b['type'] == '5') {$table->addCell(10870, ['valign' => 'center'])->addText("正确答案:" . $b['answer'] . "<w:br/>答案解析:" . $b['analysis'], null, ['align' => 'left']);}}}// 把生成的table表格渲染到mord模板中$templateProcessor->setComplexBlock('table', $table);// 生成新的word$tempPath = storage_path("app/public/temp/new_word.docx");$templateProcessor->saveAs($tempPath);}
}

4.生成结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87401.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87401.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87401.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-ai-alibaba官方 Playground 示例

1、Spring AI Alibaba 官方社区开发了一个包含完整 “前端UI后端实现” 的智能体 Playground 示例&#xff0c;示例使用 Spring AI Alibaba 开发&#xff0c;可以体验聊天机器人、多轮对话、图片生成、多模态、工具调用、MCP集成、RAG知识库等所有框架核心能力。 2、界面 3、准…

k8s pod深度理解

一、理论 pod等同于逻辑主机&#xff0c;在它上面运行各种程序&#xff08;容器&#xff09; pod的pause容器作用&#xff0c;pod网络、存储 所有容器的父容器&#xff0c;负责回收僵尸容器&#xff0c;同时它为pod中的容器提供了统一的网络及统一的共享存储。 pod的endpoint…

Android Auto即将带来变革

在2025年谷歌I/O开发者大会上&#xff0c;Android Auto迎来重磅升级。除了集成Gemini智能助手外&#xff0c;本次更新还突破性地为车载信息娱乐系统新增了浏览器和视频应用支持。值得注意的是&#xff0c;Spotify应用也将获得一系列创新功能&#xff0c;进一步丰富用户的驾驶体…

Jenkins 与 GitLab CI/CD 的核心对比

Jenkins 与 GitLab CI/CD 的核心对比及中小企业选型建议如下&#xff1a; &#x1f504; ‌核心功能对比‌ ‌维度‌‌Jenkins‌‌GitLab CI/CD‌‌集成性‌需手动配置插件对接代码仓库&#xff08;如 GitLab&#xff09;原生深度集成 GitLab 仓库&#xff0c;实现代码-CI/CD …

每日问题总结

fairy GUI适配相关问题 为什么自己适配好了但是打包发布到unity没有UI显示呢&#xff1f; 原因可能是你发布的组件和图片不在同一个包下面&#xff0c;因为fairyGUI的分包限制问题&#xff0c;每一个包限制在2048M大小。不能超过这个大小&#xff0c;所以说&#xff0c;有可能…

embbding you should know

embedding&#xff1a;就是将词向量或者图向量 采用权重升维度&#xff0c;更好的去表达这个特征&#xff1b;nn.Embedding 是 PyTorch 中的 查表式嵌入层&#xff08;lookup‐table&#xff09;&#xff0c;用于将离散的整数索引&#xff08;如词 ID、实体 ID、离散特征类别等…

【JS-6.2-模板字符串】ES6 模板字符串:现代JavaScript的字符串处理利器

在ES6(ECMAScript 2015)引入的所有新特性中&#xff0c;模板字符串(Template Literals)可能是最直观、最容易被开发者接受并广泛使用的特性之一。它彻底改变了我们在JavaScript中处理字符串的方式&#xff0c;提供了更强大、更灵活的字符串操作能力。本文将深入探讨模板字符串的…

百度捂紧“钱袋子”

何俊杰依然是李彦宏手里最能用、也最信得过的人之一。 作者|景行 编辑|文昌龙 李彦宏的OKR又兑现了一条。年初他在组织建设的OKR里放话“组织负责人进一步年轻化&#xff0c;提倡赛马”&#xff0c;如今“赛马”跑来了百度新CFO。 7月1日&#xff0c;李彦宏发全员邮件&#…

刷卡登入数据获取

1.WPF刷卡登入数据获取&#xff0c;防止用户手动输入 //WPF输入框信息及触发命令<StackPanel Orientation"Vertical" VerticalAlignment"Center" Margin"0 30" Visibility"{Binding LoginMode,Converter{StaticResource loginModeWit…

DPO训练中的logit scale 与 reward shift 偏置问题以及可能的解决方案

Logit Scale Bias&#xff08;Logit 放缩偏置&#xff09; 定义&#xff1a; Logit scale 偏置指的是&#xff0c;不同模型&#xff08;如 Actor 与 Reference&#xff09;之间输出的 logit 的数量级&#xff08;scale&#xff09;不一致&#xff0c;导致 log-prob 或 log-rati…

再见 RAG?Gemini 2.0 Flash 刚刚 “杀死” 了它!

最近谷歌发布了 Gemini 2.0 Flash&#xff0c;说实话&#xff0c;它可能是目前市面上性价比最高的 AI 模型了。 许多人写过关于 RAG 可能不再需要的文章&#xff0c;也可以看到人们在讨论它。有些人理解&#xff0c;有些人不理解&#xff0c;还有些人非常担心。 所以让我们解…

PDF的图片文字识别工具

PDF的图片文字识别工具是一款完全免费的PDF OCR识别软件&#xff0c;软件支持“单文件选择、多文件批量选择、文字预处理、结果后处理、Word导出”等功能。 选择你想要识别的PDF&#xff0c;软件就自动的开始识别PDF内容&#xff0c;识别后的文字在软件的下方有内容预览。 注意…

SQLite不够用?视频汇聚系统EasyCVR切换MySQL数据库的关键参数怎么调?

一、为什么需要将EasyCVR从SQLite切换到MySQL&#xff1f; EasyCVR默认使用的SQLite数据库属于轻量级嵌入式数据库&#xff0c;适合小型项目或设备量较少的场景&#xff08;通常建议设备通道数≤200&#xff09;。当设备通道数超过200或需要支持高并发访问、海量数据存储时&am…

【AI成长会】ubuntu 安装运行rust

在Ubuntu上用Rust编写第一个程序 从你的输出可以看出&#xff0c;Rust已经成功安装在你的Ubuntu系统上了。现在我们来编写并运行第一个Rust程序&#xff0c;整个过程需要几个简单的步骤&#xff1a; 一、配置Shell环境&#xff08;如果需要&#xff09; 虽然安装提示可能需要…

两个手机都用同个wifi,IP地址会一样吗?如何更改ip地址

会的。两个手机连接同一个 WiFi 路由器&#xff0c;它们的 IP 地址通常一样的。 一、原因如下&#xff1a; 你看到的 IP 地址有两种&#xff1a; 内网 IP 地址&#xff08;局域网 IP&#xff09;&#xff1a; 这是路由器分配给你手机在家庭或办公室内部网络使用的地址。通常格…

十六、windows系统安全-----账号克隆和隐藏

环境 windows server 2012 步骤 1.查看当前用户账号cmd 命令net user&#xff0c;或在计算机管理界面查看 2.查看具体用户信息 net user 用户名 3.新建隐藏用户 net user shiyan$ qwe123 /add **4.添加用户组 net localgroup administrators shiyan$ /add**将刚才创建的隐藏…

【安全有效新方案】WSL 默认路径迁移实战:通过 PowerShell 符号链接实现自动重定向

WSL 默认路径迁移实战&#xff1a;通过 PowerShell 符号链接实现自动重定向 在使用 WSL&#xff08;Windows Subsystem for Linux&#xff09;的过程中&#xff0c;许多用户会遇到 C 盘空间被 WSL 发行版不断占用的问题。这是因为 WSL 默认将发行版存储在C:\Users\<用户名&…

使用DDR4控制器实现多通道数据读写(十八)

一、 概述 在之前已经使用interconnect IP 实现了DDR4的多通道读写功能&#xff0c;接下来为了更能接近实用性和更直观的展现多通道读写的功能&#xff0c;使用DDS IP 核生成两组正弦波信号&#xff0c;将两组正弦波信号通过其中两个通道存储到DDR4中&#xff0c;再使用另外两个…

基于Vue.js + Node.js + MySQL实现的图书销售管理系统

图书销售管理系统 项目概述 图书销售管理系统是一个基于Vue.js Node.js MySQL的全栈Web应用程序&#xff0c;专为数据库课程设计而开发。该系统实现了完整的图书销售业务流程管理&#xff0c;包括图书信息管理、库存管理、采购管理、销售管理和统计分析等功能模块。 项目背…

工业路由器赋能智慧电力储能柜实时通讯,构建电力智能化新生态

在电力行业迈向智能化的进程中&#xff0c;智慧电力储能柜作为实现电力灵活调配与高效存储的关键设施&#xff0c;其重要性日益凸显。然而复杂多变的应用环境、多样的设备接入需求、严苛的数据传输要求以及严峻的网络安全威胁&#xff0c;给储能柜的实时通讯带来诸多挑战。工业…