PHP可以从PowerPoint文件中读取文本吗?

时间:2009-03-14 20:26:15

标签: php powerpoint

我希望让PHP读取(上传的)powerpoint演示文稿,并最小程度地从每张幻灯片中提取文本(抓取更多信息,如图像和布局甚至会更好,但我会在这一点上只考虑文本)。

我知道谷歌应用程序在其演示应用程序中执行此操作,因此我猜测有一些方法可以翻译powerpoint二进制文件,但我似乎无法找到有关如何执行此操作的任何信息。

关于尝试什么的任何想法?

谢谢 -

4 个答案:

答案 0 :(得分:3)

根据版本的不同,您可以查看Zend Framework,因为Zend_Search_Lucene能够索引PowerPoint 2007文件。只需看看相应的类文件,我认为它类似于Zend_Search_Lucene_Document_Pptx

答案 1 :(得分:1)

是的,当然有可能。

[这是一个开始。](http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/PowerPoint97-2007BinaryFileFormat(ppt)Specification.pdf)我不会说它有很好的记录/格式化,但是一旦你开始就不那么难了。首先只关注你需要的元素(幻灯片,文字,等)。

一种不那么详细和简单的方法是在十六进制编辑器中打开.ppt文件并查找您所熟悉的信息(您应该能够看到二进制数据中的文本)以及它周围的内容。然后根据信息周围的内容,您可以编写一个解析器来提取此信息。

答案 2 :(得分:1)

这是我从similar one创建的示例函数,它从Word文档中提取文本。我使用Microsoft PowerPoint文件测试了它,但它不会解码保存为.ppt的OpenOfficeImpress文件

对于.pptx文件,您可能需要查看Zend Lucene。

    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;
}

答案 3 :(得分:0)

我想将此决议发布到此。

不幸的是,我无法让PHP可靠地读取二进制数据。

我的解决方案是编写一个小型vb6应用程序,通过自动化PowerPoint来完成工作。

不是我想要的,但是,现在解决了这个问题。

话虽如此,Zend选项在某些时候看起来可能是可行的,所以我会留意。

感谢。