在 PHP 中读取/写入 MS Word 文件
是否可以在不使用 COM 对象的情况下在 PHP 中读取和写入 Word(2003 和 2007)文件?我知道我可以:
$file = fopen('c:\file.doc', 'w+');
fwrite($file, $text);
fclose();
但是Word会将其作为HTML文件而不是本机.doc文件读取。
是否可以在不使用 COM 对象的情况下在 PHP 中读取和写入 Word(2003 和 2007)文件?我知道我可以:
$file = fopen('c:\file.doc', 'w+');
fwrite($file, $text);
fclose();
但是Word会将其作为HTML文件而不是本机.doc文件读取。
读取二进制Word文档将涉及根据DOC格式的已发布文件格式规范创建解析器。我认为这不是真正可行的解决方案。
您可以使用Microsoft Office XML格式来读取和写入Word文件 - 这与Word的2003和2007版本兼容。要进行阅读,您必须确保以正确的格式保存Word文档(在Word 2007中称为Word 2003 XML-Document)。对于编写,您只需要遵循公开可用的XML架构即可。我从未使用过这种格式从PHP写出Office文档,但是我正在使用它在Excel工作表中阅读(自然保存为XML-Spreadsheet 2003)并在网页上显示其数据。由于这些文件显然是XML数据,因此在其中导航并找出如何提取所需数据是没有问题的。
另一个选项 - 仅限 Word 2007 的选项(如果 Word 2003 中未安装 OpenXML 文件格式) - 将 ressort 更改为 OpenXML。正如databyss在这里指出的那样,DOCX文件格式只是一个包含XML文件的ZIP存档。MSDN上有很多关于OpenXML文件格式的资源,所以你应该能够弄清楚如何读取所需的数据。我认为写作会复杂得多 - 这只取决于你投入多少时间。
也许你可以看看PHPExcel,它是一个能够写入Excel 2007文件的库,并使用OpenXML标准读取Excel 2007文件。您可以了解尝试读取和编写OpenXML Word文档时所涉及的工作。
这与< Office 2007及其纯PHP一起使用,没有COM废话,仍然试图弄清楚2007
<?php
/*****************************************************************
This approach uses detection of NUL (chr(00)) and end line (chr(13))
to decide where the text is:
- divide the file contents up by chr(13)
- reject any slices containing a NUL
- stitch the rest together again
- clean up with a regular expression
*****************************************************************/
function parseWord($userDoc)
{
$fileHandle = fopen($userDoc, "r");
$line = @fread($fileHandle, filesize($userDoc));
$lines = explode(chr(0x0D),$line);
$outtext = "";
foreach($lines as $thisline)
{
$pos = strpos($thisline, chr(0x00));
if (($pos !== FALSE)||(strlen($thisline)==0))
{
} else {
$outtext .= $thisline." ";
}
}
$outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext);
return $outtext;
}
$userDoc = "cv.doc";
$text = parseWord($userDoc);
echo $text;
?>