首页 文章

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

提问于
浏览
2

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

我知道谷歌应用程序在它的演示应用程序中执行它,所以我猜有一些方法来翻译powerpoint二进制文件,但我似乎无法找到有关如何执行它的任何信息 .

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

谢谢 -

4 回答

  • 1

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

  • 1

    是的,当然有可能 .

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

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

  • 0

    这是我从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

    我想发布我的决议 .

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

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

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

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

    谢谢 .

相关问题