php将内容转为word

news/2024/11/6 11:08:29/文章来源:https://www.cnblogs.com/zhaoying/p/18529536

第一步,先对内容进行处理,html的内容不适合word,在使用phpword转换时,只接受p和span元素,其它元素都要清除掉

$modifiedHtml 为内容$relust = check_table($modifiedHtml,'table'); // 判断是否存在table元素
if($relust == 1){
$modifiedHtml = table_to_div($modifiedHtml); //将内容中所有的table元素替换为p元素
}
$modifiedHtml = cleanAndReplaceHtmlWithBr($modifiedHtml);// 将内容中所有的段落标签都替换为p标签,并清除其它标签,只保留<p><img><a>这三种标签。
$modifiedHtml = imgadddomain($modifiedHtml,'https://syjx.ihwrm.com');// 给本地图片的路径前面加上指定的域名
$modifiedHtml = replaceAllImagesWithPlaceholder($modifiedHtml);//替换无效图片
$modifiedHtml = replaceInvalidImages($modifiedHtml);//判断内容中图片是否为'jpg', 'jpeg', 'gif', 'png'
$modifiedHtml = removeImgAttributesExceptSrc($modifiedHtml);//1 顺序不能错 移除 <img> 标签中的所有属性,除了 src 属性
$modifiedHtml = modifyHtmlImages($modifiedHtml);//2 判断图片宽是否超过600,超过的就限制在600,没有600的就不用管
$modifiedHtml = removeNestedPElements($modifiedHtml);//3 移除多余的p标签
$modifiedHtml = removeUnmatchedClosingParagraphTags($modifiedHtml);//4 清除没有对应的p元素
$modifiedHtml = extractBodyContent($modifiedHtml);//5 提取 <body> 和 </body> 之间的内容
$modifiedHtml = ensureImgTagsAreClosed($modifiedHtml);//6 用php判断文章内容中所有的img标签是否闭合,没有闭合的添加一下闭合

 

 

第二步

$title =  标题;
$content = 内容;use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\Shared\Html;$phpWord = new PhpWord();
$phpWord->addFontStyle('cStyle', array('size' => 12,'name' => '宋体'));//内容样式
$phpWord->addFontStyle('cStyle1', array('size' => 16,'name' => '宋体','color' => '#333'));//内容样式
$phpWord->addFontStyle('cStyle2', array('size' => 12,'name' => '宋体','color' => '#ff0000'));//链接样式
$phpWord->addFontStyle('bStyle', array('size' => 12, 'bold' => true, 'name' => '宋体'));//加粗样式
$phpWord->addFontStyle('titlestyle', array('bold' => true,'size' => 18,'name' => '宋体'));//标题的样式
$section = $phpWord->addSection();
$section->addTextBreak(2);
$section->addText($title,'titlestyle', ['alignment' => 'center']);
$section->addTextBreak(2);
//$section->addText($content,'cStyle1', ['alignment' => 'left']);
Html::addHtml($section, $content, false, false);
$section->addTextBreak(5);
$section->addText($datetime,'bStyle', ['alignment' => 'right']);
$section->addTextBreak(5);
$linkText = '本文链接:'.$link;
$linkUrl = $link;
$section->addLink($linkUrl, $linkText,'cStyle2');
header('pragma:public');
header('Content-type:application/vnd.ms-word;charset=utf-8;name="'.$file_name.'"');
header("Content-Disposition:attachment;filename='.$file_name.'");//attachment新窗口打印inline本窗口打印
header( 'Content-Type: image/jpeg');
ob_clean();
flush();
$writer = IOFactory::createWriter($phpWord, 'Word2007');
$writer->save($_SERVER['DOCUMENT_ROOT'].'/'.$file_path.'/'.$file_name);
//向浏览器输出下载
$writer->save('php://output');

 

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

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

相关文章

Error:Kotlin: Module was compiled with an incompatible version of Kotlin.

idea 启动项目时报错 Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.1.16. 解决方案(windows): 1、打开Kotlin面板 路径:File -> settings -> Languages & F…

JavaScript用法

JavaScript 用法HTML 中的 Javascript 脚本代码必须位于 <script> 与 </script> 标签之间。 Javascript 脚本代码可被放置在 HTML 页面的 <body> 和 <head> 部分中。<script> 标签 如需在 HTML 页面中插入 JavaScript,请使用 <script> 标…

在vite里面,使用linaria,css样式名混淆的问题

我们项目使用css in js来实现样式,借用了一个插件linaria。但是有一个问题,就是样式名会被混淆如下解决方法是,vite配置里面加一个 就可以了,结果如下

刚毕业,去做边缘业务,还有救吗?

有一些同时拿到了多个 Offer 的同学,会纠结于如何选择。其中有一些比较共性的问题,比如 “刚毕业,去做边缘业务,会不会影响后面的人生呢?”大家好,我是程序员鱼皮。今年的秋招已经接近尾声,我陆续收到了很多小伙伴们的 Offer 报喜。有一些同时拿到了多个 Offer 的同学,…

符合ISO26262的零部件级的软件测试解决方案

引言在功能安全的开发、测试过程中概念阶段的活动一般都是由主机厂负责,而从系统开发到单元实现则是由供应商负责,对于供应商所做的一系列测试通常称为零部件级测试。根据ISO 26262功能安全标准的划分,功能安全在零部件阶段的测试包括:软件单元测试、软件集成测试、硬件集成…

惊呆:where 1=1 可能严重影响性能,差了10多倍,快去排查你的 sql

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

鸿蒙项目实战(二):实现动态栅格布局

需求: 动态设置栅格布局子元素实现如下: 一、定义一个类,定义所有的子元素数据// 首页业务按钮可选项集合 export class HomeBussinessConfig{// 供选择的所有tab集合// 只读 静态static readonly buttons = [{title:功能一,icon:$r(app.media.icon_home_sale),},{title:功能…

Dynaseal-面向未来端侧llm agent的llm api key分发机制

为什么要有这个项目 试想一下,在未来 llm agent 在端侧全面铺开,但是目前调用大模型的方式通过了是一个拿到了就可以随便使用的 api-key?那用户岂不是从端侧的模型拿到了 api-key 就可以刷爆你的账单?!!!如果每个人的手机都跑着几个 agent,你还有一堆用户,那你服务器岂…

使用SeaTunnel从InfluxDB同步数据到Doris

本文介绍了如何使用SeaTunnel将数据从InfluxDB同步到Doris。通过SeaTunnel强大的数据集成功能,用户可以高效地将存储于InfluxDB中的时间序列数据传输至Doris,便于数据的访问与分析。版本信息: SeaTunnel 2.3.3 InfluxDB 2.7.6 Doris 2.1.3 rc09准备事项 SeaTunnel2.3.3的安装…

CMU_15445_P2_Extendible_Hash_Table

到Project2, 我们依然在处理数据库存储相关的部分, 从 Project1 中我们应该Get到两个概念:数据库底层数据操作的基本单元是 Page. buffer_pool_manager 是管理以及组织数据单元Page的工具, 在Project2的第一部分, 我们还新增了页面守护(PageGuard)的机制更加优雅的获取以及释放…

关于pacman更新时出现error: GPGME error: No data 解决方法

问题复现 基本上我隔一段时间就会出现这个问题,每一次都是在网络上寻找相关命令来解决,但是却不明白为什么会出现这个问题。 问题大概是这样的但是有一位博主详细的帮忙解答了问题,大概的意思是指:pacman 在更新数据库文件时会尝试下载每个仓库的 .db.sig 文件,这是数据库…

Zabbix7.0教程:新增Browser监控项

1 前言 Zabbix 7.0.0版本之后,增加了“Browser”监控项类型,即浏览器监控,能够使用浏览器监控复杂的网站和web应用。 浏览器监控项允许执行用户定义的JavaScript代码来模拟与浏览器相关的操作,例如点击、输入文本、网页导航等。该监控项通过HTTP/HTTPS收集数据,并部分…