技术标签: php相关
1.下载phpword
创建composer.json文件,内容如下,然后找到项目文件夹,cmd执行命令:composer install 下载文件
{
"require": {
"phpoffice/phpword": "v0.17.*"
}
}
section(部分) : phpword中将word文档分为若干个section(部分)
element(元素) : 每个section包含若干个element(元素)、文本、图片,元素分为文本元素、表格元素、其他(未涉及不做讨论)
textRun(文本元素) : 每个文本集合包含多个文本
text(文本) : 为字符或者图片
table(表格元素) : 每个表格元素包含多个行 row
row(行) : 每个行包含多个列 cell
cell(列) : 每个列包含多个textRun(文本元素) 这里没错,就是包含多个文本元素(表格元素也可以但是没人在word表格的某一个格里再来一个表格吧)
各个节点之间的关系图
<?php
/**
* Created by PhpStorm.
* User: chengyanping
* Date: 2021/5/19
* Time: 13:14
*/
require_once './vendor/autoload.php';
ini_set('display_errors', true);
ini_set('max_execution_time', '0');
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
class WordService
{
public function importWord($info)
{
$word = self::getWord($info);
// print_r($word);
return $word;
}
/**
* 获取word文档内容
* @param string $path
* @return array
*/
public static function getWord($path = '')
{
//加载word文档,使用phpword处理
$phpWord = \PhpOffice\PhpWord\IOFactory::load($path);
// print_R($phpWord);exit();
return self::getNodeContent($phpWord);
}
/**
* 根据word主节点获取分节点内容
* @param $word
* @return array
*/
public static function getNodeContent($word)
{
$return = [];
//分解部分
foreach ($word->getSections() as $section)
{
if ($section instanceof \PhpOffice\PhpWord\Element\Section) {
//分解元素
foreach ($section->getElements() as $element)
{
//文本元素
if ($element instanceof \PhpOffice\PhpWord\Element\TextRun) {
$text = '';
foreach ($element->getElements() as $ele) {
$text .= self::getTextNode($ele);
}
$return[] = $text;
}
//表格元素
else if ($element instanceof \PhpOffice\PhpWord\Element\Table) {
foreach ($element->getRows() as $ele)
{
$return[] = self::getTableNode($ele);
}
}
//保留文本元素
else if ($element instanceof \PhpOffice\PhpWord\Element\PreserveText) {
//当是预留文本的时候
$text='';
foreach ($element->getText() as $ele=>$value)
{
$text .= $value;
}
$return[] = $text;
}
}
}
}
return $return;
}
/**
* 获取文档节点内容
* @param $node
* @return string
*/
public static function getTextNode($node)
{
$return = '';
//处理文本
if ($node instanceof \PhpOffice\PhpWord\Element\Text)
{
$return .= $node->getText();
}
//处理图片
else if ($node instanceof \PhpOffice\PhpWord\Element\Image)
{
$return .= self::pic2text($node);
}
//处理文本元素
else if ($node instanceof \PhpOffice\PhpWord\Element\TextRun) {
foreach ($node->getElements() as $ele) {
$return .= self::getTextNode($ele);
}
}//处理保留文本
else if ($node instanceof \PhpOffice\PhpWord\Element\PreserveText) {
$return .= $node->getText();
}
return $return;
}
/**
* 获取表格节点内容
* @param $node
* @return string
*/
public static function getTableNode($node)
{
$return = '';
//处理行
if ($node instanceof \PhpOffice\PhpWord\Element\Row) {
foreach ($node->getCells() as $ele)
{
$return .= self::getTableNode($ele);
}
}
//处理列
else if ($node instanceof \PhpOffice\PhpWord\Element\Cell) {
foreach ($node->getElements() as $ele)
{
$return .= self::getTextNode($ele);
}
}
return $return;
}
/**
* 处理word文档中base64格式图片
* @param $node
* @return string
*/
public static function pic2text($node)
{
//获取图片编码
$imageData = $node->getImageStringData(true);
//添加图片html显示标头
$imageData = 'data:' . $node->getImageType() . ';base64,' . $imageData;
$return = '<img src="'.$imageData.'">';
return $return;
}
/**
* 处理word文档中base64格式图片
* @param $node
* @return string
*/
public static function pic2file($node)
{
//图片地址(一般为word文档地址+在word中的锚点位置)
$imageSrc = 'images/' . md5($node->getSource()) . '.' . $node->getImageExtension();
$imageData = $node->getImageStringData(true);
//将图片保存在本地
file_put_contents($imageSrc, base64_decode($imageData));
return $imageSrc;
}
/**
* 将word转化为html(转换存储html文件后展示)
* @param $path
* @throws \PhpOffice\PhpWord\Exception\Exception
*/
public static function word2html($path)
{
$phpWord = FileImportService::getOne($path);
//转为html处理
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, "HTML");
$path = pathinfo($path);
$fileName = $path['dirname'] . '/' . $path['filename'] . '.html';
$xmlWriter->save($fileName);
$html = file_get_contents($fileName);
echo $html;
die;
}
public function deleteFile($filePath)
{
if (file_exists($filePath)) {
$tt=unlink($filePath);
return $tt;
}
else {
return false;
}
}
}
参考文献:1.https://github.com/PHPOffice/PHPWord
2.https://phpword-zh.readthedocs.io/zh_CN/latest/intro.html
参考文章:https://www.cnblogs.com/haizizhu/p/13808155.html
文章浏览阅读7k次,点赞24次,收藏109次。基于51单片机的双通道DHT11温湿度显示器(LCD1602)前言新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入前言这是单片机系统的课程大作业,做的有点仓促,代码其实也可以再优化一下,在这里抛砖引玉,希望能给大家带来一_一条总线同时测量多个dht11
文章浏览阅读746次。微信开发的概念什么是微信开发微信这个软件,提供了聊天、支付、分享、收藏等各种功能,同时用户基数庞大;微信对外开放了很多接口和能力,程序员基于这些功能进行的二次开发,叫做微信开发微信开放平台微信开放平台是微信对外提供微信开放接口的一个平台,这些开放出来的微信接口,供第三方的网站或App使用;平台登录地址:https://open.weixin.qq.com微信开放平台的能力微信分享..._omcwx
文章浏览阅读582次。Java Array、List、Set 互相转化Array 转 ListString[] s = new String[]{"A", "B", "C", "D","E"};List<String> list = Arrays.asList(s);注意 list 的元素直接引用 s 的元素,换句话就是说:对 s 的修改,直接影响 list。s[0] ="F";System.out.println("list: " + list);List 转 ArrayString[] des_array 转set
文章浏览阅读1.8w次,点赞8次,收藏3次。1.配置阿里巴巴的私服镜像:在mirros元素中增加一个mirros元素。指向阿里云的下载地址。<mirrors><mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/..._could not transfer artifact com.fasterxml.jackson:jackson-bom:pom:2.8.8
文章浏览阅读2.7k次。文档上github官方说明文档https://github.com/xuxueli/xxl-job_java tomcat xxl-job配置
文章浏览阅读518次。前言:该系列文章为笔者学习清华大学《操作系统原理》相关课程笔记,参考书籍《操作系统概念》《现代操作系统等》。如果涉及相关书籍或课程版权,联系即删~《操作系统原理》学习笔记:第3章 操作系统内存管理3.1 计算机体系结构3.2 地址空间&地址生成3.3 连续内存分配3.3.1 内存碎片与分区的动态分配3.3.2 压缩式与交换式碎片整理3.1 计算机体系结构计算机基本硬件结构内存的层次结构操作系统在内存中需要完成的工作抽象(逻辑地址空间)不需要考虑底层细节,比如外设地址保护_《操作系统原理》这门课程系统讲解了现代操作系统的处理机管理,内存管理,文件管理
文章浏览阅读3.3k次。前言由服务器发送到浏览器的变量,cookie 常用于识别用户,cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP 能够创建并取回 cookie 的值。setcookie()开始之前,先来看一下该函数,它向客户端发送一个 HTTP cookie。语法:setcookie(name, value, expire..._php cookie会话隔离
文章浏览阅读2.4k次。git忽略已经提交的文件在本地的修改_git忽略本地修改
文章浏览阅读4.4k次。前言这里提供了正则表达式的校验方法,具体业务逻辑请自行更改。手机号校验phone 为用户输入的手机号。if (!(/^1[34578]\d{9}$/.test(phone))) { console.log("手机号错误!")}else { console.log("手机号正确!")}身份证号校验id 为用户输入的身份证号。if (!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(id))) { console.log("身_小程序手机号填写校验
文章浏览阅读6.8k次。因JavaScript规则 我们无法在vue中通过这样this.outdata[0]='ddd'去改变数组中下标的值,页面不会触发更新所以此时要改变就需要用到Vue.set上demo<template> <div class="hello"> <h1>vue.set</h1> ..._vue 设置数组的值
文章浏览阅读1.4k次。Tomact的介绍与环境的配置写在前面: JSP 离不开 tomact,在开始我的tomact搭建除了一些问题,所以导致,在创建WEB项目的时候,出现许多莫名奇妙的问题,现在完整将Tomact的介绍和环境的搭建完整的整理出来,以便之后的参看和像我一样的初学者查看学习。1、Tomact是什么?Tomcat 是由 Apache 软件基金会属下 Jakarta 项目开发的 Servlet 容器,是..._tomcat在什么环境下部署的
文章浏览阅读195次。需要分析JSON字符串数据可以使用JSON_EXTRACT 函数JSON 字符串json_extract(JSON,"$.key") 可以获取到valueJSON 数组JSON_EXTRACT(JSON_ARRAY,"$[0].key")可以获取到第一个JSON数组里的value$[*]_msqyl getjson