Может ли PHP читать текст из файла PowerPoint?
-
22-07-2019 - |
Вопрос
Я хочу, чтобы PHP прочитал (загруженную) презентацию PowerPoint и минимально извлек текст из каждого слайда (получение дополнительной информации, такой как изображения и макеты, было бы даже лучше, но на данный момент я бы ограничился только текстом).
Я знаю, что Google apps делает это в своем приложении для презентаций, поэтому я предполагаю, что есть какой-то способ перевести двоичный файл PowerPoint, но, похоже, я не могу найти никакой информации о том, как это сделать.
Есть идеи, что попробовать?
Спасибо -
Решение 4
Я хотел опубликовать свое решение по этому поводу.
К сожалению, мне не удалось заставить PHP надежно считывать двоичные данные.
Мое решение состояло в том, чтобы написать небольшое приложение vb6, которое выполняет эту работу путем автоматизации PowerPoint.
Не то, что я искал, но на данный момент решает проблему.
Тем не менее, вариант Zend выглядит так, как будто в какой-то момент он может оказаться жизнеспособным, так что я буду следить за этим.
Спасибо.
Другие советы
В зависимости от версии вы можете взглянуть на Zend Framework, поскольку 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;
}