如何用PhpWord将docx文件转换为仅含正文内容的HTML
仅提取PhpWord转换HTML后的正文内容
要实现只获取docx转换后的正文内容,而非完整的HTML结构,可以通过两种方式实现:
方法一:配置HTMLWriter选项(推荐)
PhpWord的HTMLWriter支持通过配置选项禁用完整HTML标签的生成,直接输出正文内容:
$fileTmp = public_path('test.docx'); $phpWord = \PhpOffice\PhpWord\IOFactory::load($fileTmp); $htmlWriter = new \PhpOffice\PhpWord\Writer\HTML($phpWord); // 禁用生成<html>、<head>标签,仅输出正文 $htmlWriter->setWriterOption('includeHtmlTag', false); $htmlWriter->setWriterOption('includeHeadTag', false); $content = $htmlWriter->getContent();
设置includeHtmlTag和includeHeadTag为false后,HTMLWriter会跳过<html>、<head>以及包裹正文的<body>标签,直接返回docx中的正文HTML内容。
方法二:DOM解析提取正文(兼容旧版本)
如果你的PhpWord版本不支持上述配置选项,可以用DOMDocument解析完整HTML,提取<body>内的内容:
$fileTmp = public_path('test.docx'); $phpWord = \PhpOffice\PhpWord\IOFactory::load($fileTmp); $htmlWriter = new \PhpOffice\PhpWord\Writer\HTML($phpWord); $fullHtml = $htmlWriter->getContent(); // 初始化DOMDocument并处理编码问题 $dom = new \DOMDocument(); libxml_use_internal_errors(true); // 屏蔽HTML解析警告 $dom->loadHTML(mb_convert_encoding($fullHtml, 'HTML-ENTITIES', 'UTF-8')); libxml_clear_errors(); // 提取body下的所有内容 $bodyNode = $dom->getElementsByTagName('body')->item(0); $content = ''; foreach ($bodyNode->childNodes as $child) { $content .= $dom->saveHTML($child); }
这种方法通过解析完整HTML文档,将<body>标签内的所有子节点拼接成正文内容,适配不支持配置选项的旧版PhpWord。
内容的提问来源于stack exchange,提问作者user3459394
相关产品推荐
相关产品推荐

