function parsePPT($filename) {
// This approach uses detection of the string "chr(0f).Hex_value.chr(0x00).chr(0x00).chr(0x00)" to find text strings, which are then terminated by another NUL chr(0x00). [1] Get text between delimiters [2]
$fileHandle = fopen($filename, "r");
$line = @fread($fileHandle, filesize($filename));
$lines = explode(chr(0x0f),$line);
$outtext = '';
foreach($lines as $thisline) {
if (strpos($thisline, chr(0x00).chr(0x00).chr(0x00)) == 1) {
$text_line = substr($thisline, 4);
$end_pos = strpos($text_line, chr(0x00));
$text_line = substr($text_line, 0, $end_pos);
$text_line = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$text_line);
if (strlen($text_line) > 1) {
$outtext.= substr($text_line, 0, $end_pos)."\n";
}
}
}
return $outtext;
}
4 回答
根据版本,您可以查看Zend Framework,因为Zend_Search_Lucene能够索引PowerPoint 2007文件 . 只需看看相应的类文件,我认为它就像
Zend_Search_Lucene_Document_Pptx
.是的,当然有可能 .
[这是一个开始 . ](http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/PowerPoint97-2007BinaryFileFormat(ppt)Specification.pdf))我不会很好地记录/格式化,但是一旦开始就不那么难了 . 首先只关注你需要的元素(幻灯片,文本等) .
一个不太详细和简单的方法是在十六进制编辑器中打开.ppt文件并查找您所熟悉的信息(您应该能够看到二进制数据中的文本)以及它周围的内容 . 然后根据包含该信息的内容,您可以编写一个解析器来提取此信息 .
这是我从similar one创建的示例函数,它从Word文档中提取文本 . 我使用Microsoft PowerPoint文件对其进行了测试,但它不会解码保存为.ppt的OpenOfficeImpress文件
对于.pptx文件,您可能需要查看Zend Lucene .
我想发布我的决议 .
不幸的是,我无法让PHP可靠地读取二进制数据 .
我的解决方案是编写一个小型vb6应用程序,通过自动化PowerPoint来完成工作 .
不是我想要的,但是,现在解决了这个问题 .
话虽如此,Zend选项在某些时候看起来可能是可行的,所以我会看到它 .
谢谢 .