我想让 PHP 读取(上传的)powerpoint 演示文稿,并最少地从每张幻灯片中提取文本(获取更多信息,例如图像和布局甚至会更好,但此时我会只考虑文本)。

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

关于尝试什么有什么想法吗?

谢谢 -

有帮助吗?

解决方案 4

我想发布我的决议。

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

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

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

话虽这么说,Zend 选项看起来在某个时候可能是可行的,所以我会关注这一点。

谢谢。

其他提示

根据不同的版本,你可以在Zend框架看上去就象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 文件并查找您感兴趣的信息(您应该能够看到二进制数据中的文本)及其周围的内容。然后,根据该信息周围的内容,您可以编写一个解析器来提取该信息。

这里的一个示例函数我创建形式的类似一个从Word文档中提取文本。我与Microsoft PowerPoint文件测试它,但它不会解码OpenOfficeImpress保存为.ppt文件

有关.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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top