如何使用php将docx文档转换为html?

时间:2011-01-03 18:38:09

标签: php html docx

我希望能够上传MS Word文档并将其导出到我的网站中。

有没有办法实现这个目标?

6 个答案:

答案 0 :(得分:20)

//FUNCTION :: read a docx file and return the string
function readDocx($filePath) {
    // Create new ZIP archive
    $zip = new ZipArchive;
    $dataFile = 'word/document.xml';
    // Open received archive file
    if (true === $zip->open($filePath)) {
        // If done, search for the data file in the archive
        if (($index = $zip->locateName($dataFile)) !== false) {
            // If found, read it to the string
            $data = $zip->getFromIndex($index);
            // Close archive file
            $zip->close();
            // Load XML from a string
            // Skip errors and warnings
            $xml = DOMDocument::loadXML($data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            // Return data without XML formatting tags

            $contents = explode('\n',strip_tags($xml->saveXML()));
            $text = '';
            foreach($contents as $i=>$content) {
                $text .= $contents[$i];
            }
            return $text;
        }
        $zip->close();
    }
    // In case of failure return empty string
    return "";
}

ZipArchive DOMDocument 都在PHP中,因此您无需安装/包含/需要其他库。

答案 1 :(得分:3)

可以使用PHPDocX

它几乎支持所有HTML CSS样式。此外,您可以使用模板通过replaceTemplateVariableByHTML为HTML添加额外的格式。

PHPDocX的HTML方法也允许直接使用Word样式。你可以使用这样的东西:

$docx->embedHTML($myHTML, array('tableStyle' => 'MediumGrid3-accent5PHPDOCX'));

如果您希望所有表格都使用MediumGrid3-accent5 Word样式。 embedHTML方法及其模板版本(replaceTemplateVariableByHTML)保留了继承,这意味着您可以使用预定义的Word样式并使用CSS覆盖其任何属性。

您也可以使用“JQuery type”选择器提取HTML的选定部分。

答案 2 :(得分:3)

这可能对您有用How to Convert Docx to HTML

答案 3 :(得分:1)

您可以使用Print2flash库将Word docx文档转换为html。这是我客户网站上的PHP摘录,它将文档转换为html:

NO

它将$ wordfile变量中指定路径的文档转换为$ htmlFile变量指定的html页面文件。保留所有格式,超链接和图表。您可以使用来自Print2flash SDK的更全面的样本来获取所需的const.php文件。

答案 4 :(得分:0)

如果您不拒绝REST API,则可以使用:

  • Apache Tika。是文本提取的经过验证的OSS领导者
  • 如果您不想轻松配置并想要随时可用的解决方案,可以使用RawText,但它不是免费的。

RawText的示例代码:

$result = $rawText -> parse($your_file)

答案 5 :(得分:0)

这是基于 David Lin 上面的回答的解决方法 删除 docx 的 xml 标签中的 "w:" 留下类似 Html 的标签

    function readDocx($filePath) {
    // Create new ZIP archive
    $zip = new ZipArchive;
    $dataFile = 'word/document.xml';
    // Open received archive file
    if (true === $zip->open($filePath)) {
        // If done, search for the data file in the archive
        if (($index = $zip->locateName($dataFile)) !== false) {
            // If found, read it to the string
            $data = $zip->getFromIndex($index);
            // Close archive file
            $zip->close();
            // Load XML from a string
            // Skip errors and warnings
            $xml = new DOMDocument("1.0", "utf-8");
            $xml->loadXML($data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING|LIBXML_PARSEHUGE);
            $xml->encoding = "utf-8";
            // Return data without XML formatting tags
            $output =  $xml->saveXML();
            $output = str_replace("w:","",$output);

            return $output;
        }
        $zip->close();
    }
    // In case of failure return empty string
    return "";
}