我使用以下代码将MS word .doc文件读取为纯文本。我从stackoverflow帖子中获取了这段代码,但我无法完全理解代码。但是,当阅读一些像Adrian的简历(www.iknowkungfoo.com/resume/adrian_j_moreno_resume.doc)的文档时,代码返回一个fread错误。看起来无法在此文件中访问标头。有人可以解释这是什么问题吗?
function readWord($filename) {
if(file_exists($filename))
{
if(($fh = fopen($filename, 'r')) !== false )
{
$headers = fread($fh, 0xA00);
//$headers = fread($fh, filesize($filename));
// 1 = (ord(n)*1) ; Document has from 0 to 255 characters
$n1 = ( ord($headers[0x21C]) - 1 );
// 1 = ((ord(n)-8)*256) ; Document has from 256 to 63743 characters
$n2 = ( ( ord($headers[0x21D]) - 8 ) * 256 );
// 1 = ((ord(n)*256)*256) ; Document has from 63744 to 16775423 characters
$n3 = ( ( ord($headers[0x21E]) * 256 ) * 256 );
// 1 = (((ord(n)*256)*256)*256) ; Document has from 16775424 to 4294965504 characters
$n4 = ( ( ( ord($headers[0x21F]) * 256 ) * 256 ) * 256 );
// Total length of text in the document
$textLength = ($n1 + $n2 + $n3 + $n4);
//var_dump($headers);
$extracted_plaintext = fread($fh, $textLength);
// if you want to see your paragraphs in a new line, do this
// return nl2br($extracted_plaintext);
return $extracted_plaintext;
} else {
return false;
}
} else {
return false;
}
}
答案 0 :(得分:-2)
这是从php读取docx文件的函数,在函数参数中传递文件路径,并将其中的文本返回到doc文件中。
function read_file_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);
}// end while
zip_close($zip);
//echo $content;
//echo "<hr>";
//file_put_contents('1.xml', $content);
$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;
}