【问题标题】:read word document in php用php读取word文档
【发布时间】:2012-05-18 03:46:02
【问题描述】:

我现在正在做一个项目,但我一直在阅读 word 文档。

Word 文件内容。

This is a test word file in PHP.

Thank you.

PHP 代码。

    $myFile = "wordfile.docx";
    $fh = fopen($myFile, 'r');
    $theData = fread($fh, 1000);
    fclose($fh);
    echo $theData;

输出:

PK!éQ°Â[Content_Types].xml ¢( ´”MOÂ@†ï&þ‡f¯¦]ð`Œ¡pP<*‰Ïëv
 «Ýì,_ÿÞiI¡(ziÒNß÷}fÚÞ`©‹h•5)ë&‘6Sf’²×ñc|Ë"Âd¢°R¶dƒþåEo
 ¼r€© ¦l‚»ãå´ÀÄ:0TÉ­×"ЭŸp'䧘¿îtn¸´&€  q(=X¿÷¹˜!.éñ
 š„ä,º_¿WF¥L8W()ò²Êu <"œ›l.Þ%¤¬Ìqª^Nøp0ÙKPºl­*Õ3Ó
 «¢‘ðáIhbçë3žY9ÓÔwr¼¹F›çJB­/Ýœ·é;é"©+Z(³e?ÈaUþ=ÅÚ÷Ä
 ø7¦Ã<I?Hû<4ÆeÓÉ:bGÛž!ÐN    ùþÛÆmCÇs+ÂÞ_þbǼ$§ó4ïœ
 0ñ£¶n…´#€W×îٕͱH:#oÒÎñ¿h{»JuLGÎ êõÐtÄêDZXg÷åFÌ kÈæÕîÿÿPK
 !ÇÂ'¼ß_rel

有没有在 PHP 中阅读 word 文档?

【问题讨论】:

  • @Webtecher 我试过了,我得到了这个错误。 Fatal error: Class 'COM' not found
  • 有一个非常棒的阅读word文档的资源:@​​987654322@。

标签: php


【解决方案1】:

docx 使用这个函数

function read_docx($filename){

    $striped_content = '';
    $content = '';

    if(!$filename || !file_exists($filename)) return false;

    $zip = zip_open($filename);
    if (!$zip || is_numeric($zip)) return false;

    while ($zip_entry = zip_read($zip)) {

        if (zip_entry_open($zip, $zip_entry) == FALSE) continue;

        if (zip_entry_name($zip_entry) != "word/document.xml") continue;

        $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

        zip_entry_close($zip_entry);
    }
    zip_close($zip);      
    $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
    $content = str_replace('</w:r></w:p>', "\r\n", $content);
    $striped_content = strip_tags($content);

    return $striped_content;
}

它将从 docx 返回文本

【讨论】:

  • 但格式正在改变。如何保持格式不变?
  • @RohanGala 它将读取 docx word 文件并返回它的内容。你能告诉我你得到的是哪种格式吗?
  • 不显示空格和空行的格式。但是文本是正确获取的
  • 这很好用,但由于某种原因经常跳过前几行
  • strip_tags() 将删除所有包含内联样式和/或类的xml;您将需要这些并以某种方式解释/应用这些以恢复样式。
【解决方案2】:

以下是与@suhdir 的答案类似的功能,但适用于 PHP 8:

    function readDocx($filename)
    {

        $zip = new ZipArchive();
        if ($zip->open($filename)) {
            $content = $zip->getFromName("word/document.xml");
            $zip->close();
            $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
            $content = str_replace('</w:r></w:p>', "\r\n", $content);

            return strip_tags($content);
        }
        return false;

    }

Zip 函数在 PHP 8 中已被弃用并被 ZipArchive 取代。

【讨论】:

  • 我正在使用 PHP7 并收到了 @Sudhir 答案的弃用警告。此外,我尝试了 phpWord,但它不适用于我由 MS Word 或 Google Docs 创建的 word 文件。这个简短的代码对两者都有效。这应该被标记为答案,谢谢。
【解决方案3】:

“PHPWord 是一个用纯 PHP 编写的库,它提供了一组用于写入和读取不同文档文件格式的类。” (PHPOffice,2016)

这个开放的 php 库应该可以解决您的问题。你可以下载它或由作曲家得到它:

https://github.com/PHPOffice/PHPWord

【讨论】:

  • PHPWord 有时效果很好,但是对于很多文件,提取的内容不完整:(
【解决方案4】:

“docx”与“doc”不同。 Docx 文件基本上是xml files in a zipfile container (as described by wikipedia)。 Doc 文件是二进制 blob。

我知道没有库可以轻松读取 php 中的 docx 文件(尽管Phpdocx can write them)。但是,由于这些只是 zip 文件和 xml 文件,您应该可以使用 ZipArchive 打开 docx 容器和 DOMDocumentSimpleXMLXMLReaderXSLTProcessor 来读取 xml 文档自己。

【讨论】:

    【解决方案5】:

    Word 文档不像文本文件那样存储方便(它更像 xml / 二进制文件),因此您不能只使用 echo 并期望它输出 docx 文件的人类可读部分。

    有一个库可以做你想做的,但它只需要doc 文件

    Docvert

    【讨论】:

    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多