使用PHPOffice/PHPWord实现读取Word内容

 更新时间:2023年07月17日 15:45:32   作者:huaweichenai  
这篇文章主要为大家详细介绍了如何使用PHPOffice/PHPWord实现读取Word内容的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

一:phpoffice/phpword安装

composer require phpoffice/phpword

phpword的GitHub地址:https://github.com/PHPOffice/PHPWord

phpword文档地址:https://phpword.readthedocs.io/en/latest/

二:加载word文档

$word = \PhpOffice\PhpWord\IOFactory::load("xxx")

三:获取word所有节点

$sections = $word->getSections()

四:获取word所有段落

$section->getElements()

五:判断文本元素类型

if ($element instanceof \PhpOffice\PhpWord\Element\TextRun) {
    //文本元素
} else if ($element instanceof \PhpOffice\PhpWord\Element\Table) {
    //表格元素
}

六:获取word文本内容

$node->getText()

七:获取word图片

//获取图片编码
$imageData = $node->getImageStringData(true);
//添加图片html显示标头
$imageData = 'data:' . $node->getImageType() . ';base64,' . $imageData;
八:读取word内容示例
/**
 * 获取word文档内容
 * @param string $wordPath
 * @return array
 */
public function getWord($wordPath = '')
{
    //加载word文档,使用phpword处理
    $word = \PhpOffice\PhpWord\IOFactory::load($wordPath);
    return $this->getNodeContent($word);
}
/**
 * 根据word主节点获取分节点内容
 * @param $word
 * @return array
 */
public 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 .= $this->getTextNode($ele);
                    }
                    $return[] = $text;
                }
                //表格元素
                else if ($element instanceof \PhpOffice\PhpWord\Element\Table) {
                    foreach ($element->getRows() as $ele)
                    {
                        $return[] = $this->getTableNode($ele);
                    }
                }
            }
        }
    }
    return $return;
}
/**
 * 获取文档节点内容
 * @param $node
 * @return string
 */
public function getTextNode($node)
{
    $return = '';
    //处理文本
    if ($node instanceof \PhpOffice\PhpWord\Element\Text)
    {
        $return .= $node->getText();
    }
    //处理图片
    else if ($node instanceof \PhpOffice\PhpWord\Element\Image)
    {
        $return .= $this->pic2text($node);
    }
    //处理文本元素
    else if ($node instanceof \PhpOffice\PhpWord\Element\TextRun) {
        foreach ($node->getElements() as $ele) {
            $return .= $this->getTextNode($ele);
        }
    }
    return $return;
}
/**
 * 获取表格节点内容
 * @param $node
 * @return string
 */
public function getTableNode($node)
{
    $return = '';
    //处理行
    if ($node instanceof \PhpOffice\PhpWord\Element\Row) {
        foreach ($node->getCells() as $ele)
        {
            $return .= $this->getTableNode($ele);
        }
    }
    //处理列
    else if ($node instanceof \PhpOffice\PhpWord\Element\Cell) {
        foreach ($node->getElements() as $ele)
        {
            $return .= $this->getTextNode($ele);
        }
    }
    return $return;
}
/**
 * 处理word文档中base64格式图片
 * @param $node
 * @return string
 */
public function pic2text($node)
{
    //获取图片编码
    $imageData = $node->getImageStringData(true);
    //添加图片html显示标头
    $imageData = 'data:' . $node->getImageType() . ';base64,' . $imageData;
    $return = '<img src="'.$imageData.'">';
    return $return;
}

调用方法:

$docx = 'XXX.docx';
$word  = $this->getWord($docx);

到此这篇关于使用PHPOffice/PHPWord实现读取Word内容的文章就介绍到这了,更多相关PHPOffice PHPWord读取Word内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS实现php的伪分页

    JS实现php的伪分页

    假如某一个页面的数据很多,不方便全都显示出来,而且假设里面有个播放器,不希望在翻页的时候播放器会终止的话,就可以采用这个方法尽管可以用Ajax,但是在数据比较少的情况下,这个方法更有优势
    2008-05-05
  • php中rename函数用法分析

    php中rename函数用法分析

    这篇文章主要介绍了php中rename()函数用法,较为详细的分析了rename()函数中参数的含义及具体的使用方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • php仿QQ验证码的实例分析

    php仿QQ验证码的实例分析

    本文介绍一个php实现的仿QQ中验证码的例子,QQ注册或登录时的验证码,大家都见过吧,本文给出的代码,也可以实现那样的验证码哦
    2013-07-07
  • PHP中preg_match函数正则匹配的字符串长度问题

    PHP中preg_match函数正则匹配的字符串长度问题

    这篇文章主要介绍了PHP中preg_match函数正则匹配的字符串长度问题,如果你也遇到了preg_match正则提取内容时总是空白或提取不到的话,那就可能是遇到了这个问题啦,需要的朋友可以参考下
    2015-05-05
  • 队列在编程中的实际应用(php)

    队列在编程中的实际应用(php)

    队列(Queue)是运算受到限制的一种线性表。只允许在表的一端进行插入,而在另一端进行删除元素的线性表。队尾(rear)是允许插入的一端。队头(front)是允许删除的一端。空队列是不含元素的空表。
    2010-09-09
  • php 带逗号千位符数字的处理方法

    php 带逗号千位符数字的处理方法

    php 带逗号千位符数字的处理方法,需要的朋友可以参考下。
    2012-01-01
  • PHP获取网络图片信息的方法步骤详解

    PHP获取网络图片信息的方法步骤详解

    在开发Web应用程序中,我们经常需要从网络上获取图片并对其进行处理,有时候,我们可能需要知道图片的长宽和类型信息,以便进行进一步的操作或展示给用户,所以本文就大家介绍PHP获取网络上图片信息的方法步骤,感兴趣的同学跟着小编一起来看看吧
    2023-08-08
  • 在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境

    在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境

    这篇文章主要介绍了在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境,需要的朋友可以参考下
    2016-04-04
  • PHP最常用的ini函数分析 针对PHP.ini配置文件

    PHP最常用的ini函数分析 针对PHP.ini配置文件

    php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。个人感觉最有用的就是ini_set和ini_get。
    2010-04-04
  • 如何在HTML 中嵌入 PHP 代码

    如何在HTML 中嵌入 PHP 代码

    本文给大家分享的是在html中嵌入php代码的方法,十分的简单实用,有需要的小伙伴可以参考下
    2015-05-05

最新评论