1. 本次案例使用的phpword版本0.17.0

1.下载phpword

创建composer.json文件,内容如下,然后找到项目文件夹,cmd执行命令:composer install 下载文件

{
    "require": {
       "phpoffice/phpword": "v0.17.*"
    }
}

2.phpword 重要名词解释

section(部分) : phpword中将word文档分为若干个section(部分)

element(元素) : 每个section包含若干个element(元素)、文本、图片,元素分为文本元素、表格元素、其他(未涉及不做讨论)

textRun(文本元素) : 每个文本集合包含多个文本

text(文本) : 为字符或者图片

table(表格元素) : 每个表格元素包含多个行 row

row(行) : 每个行包含多个列 cell

cell(列) : 每个列包含多个textRun(文本元素) 这里没错,就是包含多个文本元素(表格元素也可以但是没人在word表格的某一个格里再来一个表格吧)

各个节点之间的关系图

3.执行代码

<?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

php利用phpword读取word相关推荐

  1. 利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  2. java word模板poi生成文件_利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  3. 在VS2010中利用MFC读取word、ppt、excel格式文件

    本文源码的应用环境说明:Windows 7,Microsoft Visual Studio 2010,Microsoft Office Excel 2013 最近自己在做一个利用OLE/COM的实现M ...

  4. 利用FME读取Word中的表格

    利用FME的MSWordStyler转换器和Word写模块,我们可以将一些简单的文本和表格写出到Word文档格式中,转换器和写模块截图如下: 图1 MSWordStyler转换器 图2 Word写模块 ...

  5. 使用phpoffice/phpword读取word内容

    一:phpoffice/phpword安装 composer require phpoffice/phpword phpword的GitHub地址:https://github.com/PHPOffi ...

  6. poi 顺序解析word_利用POI读取word、Excel文件的最佳实践教程

    前言 POI是 Apache 旗下一款读写微软家文档声名显赫的类库.应该很多人在做报表的导出,或者创建 word 文档以及读取之类的都是用过 POI.POI 也的确对于这些操作带来很大的便利性.我最近 ...

  7. php读取word格式,php读取word格式 phpword 读取word内容

    PHP怎么读取WORD文档 传就传吧,后台传什么文件都可以,原样保留在文件夹下面就行了,天台的直接指向它,只要前台安装了相应的程序就能打开,例如指向一个WORD的代码可以是:你可能觉得这样很不好,前台 ...

  8. 【PYTHON,WORD】1.利用python-docx 读取word文件

    0.安装python-docx模块 windows:pip install python-docx mac:pip3 install python-docx 1.word文档结构 Document: ...

  9. python导入word转换的html,python如何转换word格式、读取word内容、转成html

    # python如何转换word格式.读取word内容.转成html? import docx from win32com import client as wc # 首先将doc转换成docx wo ...

最新文章

  1. linux系统内核官网,五年26个版本:Linux系统内核全程回顾
  2. SVN基本的理解和使用
  3. Microsoft Enterprise Library 5.0 系列(十) Configuration Application Block
  4. 小程序点击事件改变样式(普通js鼠标点击事件)
  5. 网易云音乐被纳入港股通 3月7日起生效
  6. 机器人“病患”会流血会休克,魔鬼训练从斯坦福医院开始 |准医生的噩梦
  7. linux下的tuxedo开发实例
  8. 如何仅对文档项目在ECB中应用自定义操作
  9. 二维叉乘求三角形面积_角形
  10. WIN11 系统取消代理 | 设置代理服务器
  11. 计算机组成原理计算题整理
  12. Minecraft 1.12.2模组开发(十) 食物制作
  13. 阿里大手子评:入门到大成!GitHub新上线并发编程深度解析实战PDF
  14. 计算机专业教师结构化面试题目,2019教师资格证结构化面试:考官常问的结构化题目(附带答案)...
  15. 查看Linux下的文件
  16. Webhooks应用概述
  17. Hulu推荐 | 五年口碑依旧百分百好评?《汉密尔顿》上线Disney+
  18. 1001 1002
  19. 【Electron-vue】构建桌面应用(25)- Ubuntu安装deb文件任务栏不显示应用图标
  20. Java虚拟机学习集锦是我攒来的,【备战秋招冲击大厂(1)

热门文章

  1. 海思芯片部署MPP并验证功能
  2. 机器人工程的工作与考研之困惑“以学生为中心”
  3. Windows Git Bash 无法运行python解决方法
  4. 意念云分发是干嘛的?
  5. 信息学竞赛学习资料整理
  6. 全球及中国大豆蛋白行业未来发展趋势及投资建议分析报告2022-2028年版
  7. 转陈皓老师的无锁队列的实现
  8. 【附源码】计算机毕业设计java中小学家校通系统设计与实现
  9. 浮躁与投机取巧 (干一行爱一行,学会沉淀)
  10. Docker搭建RPG小游戏