2020/08/17 PHP/Python/Java No Comments php解析获取word内容-phpword **phpword试用说明,php解析word内容,php读取word内容,php获取word内容方法** ```php namespace app\controller; use app\BaseController; class Index extends BaseController { public function index(){ echo ' '; } public function wordtohtml(){ $file = request()->file('file'); $ext_name = strtolower(pathinfo($file->getOriginalName(), PATHINFO_EXTENSION)); if($ext_name != 'docx'){ exit(result('文件格式不支持,请上传docx格式word文件',401,'校验失败')); } if($file->getSize() > 2097152) { exit(result('文件太大了,请上传小于2MB的word文件',401,'校验失败')); } $savename = \think\facade\Filesystem::putFile( 'uploads', $file); $html = $this->wordParsing($savename); //print_r(); unlink($savename); } //解析word内容并返回html public function wordParsing($source) { //加载word文件 并 通过getSections获取word文档的全部元素 $sections = \PhpOffice\PhpWord\IOFactory::load($source)->getSections(); //定义html变量用于存储word文本内容 $html = ''; //循环所有元素 foreach($sections as $section) { //获取当前元素的所有子元素 $elements = $section->getElements(); //循环当前子元素 foreach ($elements as $eky => $evl) { $html .= ''; if ($evl instanceof \PhpOffice\PhpWord\Element\TextRun) { //判断是否普通文本 $content_elements = $evl->getElements(); foreach ($content_elements as $eky2 => $evl2) { $html .= $this->elementHandler($evl2, $evl); } }elseif($evl instanceof \PhpOffice\PhpWord\Element\PreserveText){ //判断是否保留元素(如自动生成链接的网址元素) $data = $evl->getText(); $find = array('{','HYPERLINK','}',' ','"','f','g'); $replace = ''; $resText = str_replace($find, $replace, $data); if(isset($resText)){ $html .= $resText[0]; } }elseif($evl instanceof \PhpOffice\PhpWord\Element\Table){ $all_table_elements = $evl->getRows(); $html .= ''; foreach ($all_table_elements as $tky => $tvl) { $html .= ''; $all_table_cells = $tvl->getCells(); foreach ($all_table_cells as $cky => $cvl){ $cell_elements = $cvl->getElements(); //获取表格宽度(返回单位为:缇) $td_width = $cvl->getWidth(); $td_width_px = round($cvl->getWidth()/15,0); $html .= ''; foreach ($cell_elements as $cl){ //判断当存在elements属性时执行 if( property_exists($cl, 'elements') ){ $content_elements = $cl->getElements(); foreach ($content_elements as $eky2 => $evl2) { $html .= $this->elementHandler($evl2, $cl); } } } $html .= ''; } $html .= ''; } $html .= ''; } $html .= ''; } return $html; } } //元素内容数据处理,$end_element最末级元素,是$parent_element的子元素;$parent_element为当前元素 public function elementHandler($end_element, $parent_element) { $html = ''; if ($end_element instanceof \PhpOffice\PhpWord\Element\Text) { //判断是否普通文本 $style = $end_element->getFontStyle(); //$fontFamily = mb_convert_encoding($style->getName(), 'GBK', 'UTF-8'); $fontFamily = $style->getName(); $fontSize = $style->getSize() ? ($style->getSize()/72)*96 : ''; $isBold = $style->isBold(); $fontcolor = $style->getColor(); $styleString = ''; $fontFamily && $styleString .= "font-family:{$fontFamily};"; $fontSize && $styleString .= "font-size:{$fontSize}px;"; $isBold && $styleString .= "font-weight:bold;"; $fontcolor && $styleString .= "color:{$fontcolor};"; $html .= sprintf('%s', $styleString,$end_element->getText() //mb_convert_encoding($evl2->getText(), 'GBK', 'UTF-8') );//dump($end_element->getText()); }elseif ($end_element instanceof \PhpOffice\PhpWord\Element\Link) { //判断是否链接 $style = $end_element->getFontStyle(); //$fontFamily = mb_convert_encoding($style->getName(), 'GBK', 'UTF-8'); $fontFamily = $style->getName(); $fontSize = $style->getSize() ? ($style->getSize()/72)*96 : ''; $isBold = $style->isBold(); $fontcolor = $style->getColor(); $styleString = ''; $fontFamily && $styleString .= "font-family:{$fontFamily};"; $fontSize && $styleString .= "font-size:{$fontSize}px;"; $isBold && $styleString .= "font-weight:bold;"; $fontcolor && $styleString .= "color:{$fontcolor};"; $html .= sprintf('%s', $end_element->getSource(), $styleString, $end_element->getText() //mb_convert_encoding($evl2->getText(), 'GBK', 'UTF-8') ); } elseif ($end_element instanceof \PhpOffice\PhpWord\Element\Image) { //判断是否图片 //可以在这里执行自定义方法将图片上传到OSS或者图片服务器哈 $imageDataTmp = $end_element->getImageStringData(true); $imageType = $end_element->getImageType() ? $end_element->getImageType() : 'image/jpg'; $imageData = 'data:' . $imageType . ';base64,' . str_replace(array("\r\n", "\r", "\n"), "", $imageDataTmp); //保存文件 //$imageSrc = './uploads/' . md5($end_element->getSource()) . '.' . $end_element->getImageExtension(); //file_put_contents($imageSrc,base64_decode(explode(',',$imageData)[1])); $html .= ''; } return $html; } } ``` **PS:**文件为测试试用,有点乱,可以自行整理哈。 本文最后更新于 2020-09-01 18:46:43 并被添加「phpword」标签,已有 30759 位童鞋阅读过。 本文作者:未来往事 本文链接:https://felixway.cn/post/678.html 本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处