我希望让PHP读取(上传的)powerpoint演示文稿,并最小程度地从每张幻灯片中提取文本(抓取更多信息,如图像和布局甚至会更好,但我会在这一点上只考虑文本)。
我知道谷歌应用程序在其演示应用程序中执行此操作,因此我猜测有一些方法可以翻译powerpoint二进制文件,但我似乎无法找到有关如何执行此操作的任何信息。
关于尝试什么的任何想法?
谢谢 -
答案 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选项在某些时候看起来可能是可行的,所以我会留意。
感谢。