【问题标题】:Can PHP read text from a PowerPoint file?PHP 可以从 PowerPoint 文件中读取文本吗?
【发布时间】:2010-10-13 09:32:49
【问题描述】:

我想让 PHP 读取(上传的)PowerPoint 演示文稿,并从每张幻灯片中提取最少的文本(获取更多信息,如图像和布局甚至会更好,但我现在只满足于文本)。

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

有什么想法可以尝试吗?

谢谢-

【问题讨论】:

    标签: php powerpoint


    【解决方案1】:

    根据版本,您可以查看 Zend 框架,因为 Zend_Search_Lucene 能够索引 PowerPoint 2007 文件。看一下对应的class文件,我觉得是Zend_Search_Lucene_Document_Pptx

    【讨论】:

      【解决方案2】:

      是的,当然有可能。

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          我想对此发表我的决心。

          很遗憾,我无法让 PHP 可靠地读取二进制数据。

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

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

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

          谢谢。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-29
            • 2023-03-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多