Я хотел бы знать, как я могу прочитать содержимое документа или документа. Я использую Linux VPS и PHP, но если есть более простое решение, использующее другой язык, пожалуйста, дайте мне знать, если оно работает под веб-сервером linux.
Это только решение .DOCX. Для .DOC или .PDF вам нужно использовать что-то еще, например pdf2text.php для PDF
function docx2text($filename) {
return readZippedXML($filename, "word/document.xml");
}
function readZippedXML($archiveFile, $dataFile) {
// Create new ZIP archive
$zip = new ZipArchive;
// Open received archive file
if (true === $zip->open($archiveFile)) {
// If done, search for the data file in the archive
if (($index = $zip->locateName($dataFile)) !== false) {
// If found, read it to the string
$data = $zip->getFromIndex($index);
// Close archive file
$zip->close();
// Load XML from a string
// Skip errors and warnings
$xml = new DOMDocument();
$xml->loadXML($data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
// Return data without XML formatting tags
return strip_tags($xml->saveXML());
}
$zip->close();
}
// In case of failure return empty string
return "";
}
echo docx2text("test.docx"); // Save this contents to file
Здесь я добавил решение, чтобы получить текст от .док, .docx файлы слов
private function read_doc() {
$fileHandle = fopen($this->filename, "r");
$line = @fread($fileHandle, filesize($this->filename));
$lines = explode(chr(0x0D),$line);
$outtext = "";
foreach($lines as $thisline)
{
$pos = strpos($thisline, chr(0x00));
if (($pos !== FALSE)||(strlen($thisline)==0))
{
} else {
$outtext .= $thisline." ";
}
}
$outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext);
return $outtext;
}
private function read_docx(){
$striped_content = '';
$content = '';
$zip = zip_open($this->filename);
if (!$zip || is_numeric($zip)) return false;
while ($zip_entry = zip_read($zip)) {
if (zip_entry_open($zip, $zip_entry) == FALSE) continue;
if (zip_entry_name($zip_entry) != "word/document.xml") continue;
$content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
zip_entry_close($zip_entry);
}// end while
zip_close($zip);
$content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
$content = str_replace('</w:r></w:p>', "\r\n", $content);
$striped_content = strip_tags($content);
return $striped_content;
}
Я написал библиотеку, которая анализирует документы docx, odt и rtf на основе ответов здесь и в других местах.
Основное улучшение, которое я внес в синтаксический анализ .docx и .odt, заключается в том, что библиотека обрабатывает XML, описывающий документ, и пытается согласовать его с тегами HTML, т.е. Эм а также сильный теги. Это означает, что если вы используете библиотеку для CMS, форматирование текста не теряется
Ты можешь его достать Вот
Мое решение Antiword для .doc и docx2txt для .docx
Предполагая, что Linux-сервер под вашим контролем, загрузите каждый, распакуйте и установите. Я установил каждую систему:
Antiword: make global_install
docx2txt: make install
Затем использовать эти инструменты для извлечения текста в строку в php:
//for .doc
$text = shell_exec('/usr/local/bin/antiword -w 0 ' .
escapeshellarg($docFilePath));
//for .docx
$text = shell_exec('/usr/local/bin/docx2txt.pl ' .
escapeshellarg($docxFilePath) . ' -');
docx2txt требует Perl
Решение no_freedom действительно извлекает текст из файлов docx, но оно может разделить пробелы. В большинстве файлов, которые я тестировал, были случаи, когда между словами, которые нужно разделять, между ними не было места. Не хорошо, когда вы хотите полнотекстовый поиск документов, которые вы обрабатываете.
Пытаться ApachePOI. Это хорошо работает для Java. Я полагаю, у вас не возникнет никаких проблем с установкой Java на Linux.
Я использовал docxtotxt для извлечения содержимого файла docx. Мой код выглядит следующим образом:
if($extention == "docx")
{
$docxFilePath = "/var/www/vhosts/abc.com/httpdocs/writers/filename.docx";
$content = shell_exec('/var/www/vhosts/abc.com/httpdocs/docx2txt/docx2txt.pl
'.escapeshellarg($docxFilePath) . ' -');
}
Я вставляю небольшие улучшения в функцию преобразования doc в txt
private function read_doc() {
$line_array = array();
$fileHandle = fopen( $this->filename, "r" );
$line = @fread( $fileHandle, filesize( $this->filename ) );
$lines = explode( chr( 0x0D ), $line );
$outtext = "";
foreach ( $lines as $thisline ) {
$pos = strpos( $thisline, chr( 0x00 ) );
if ( $pos !== false ) {
} else {
$line_array[] = preg_replace( "/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/", "", $thisline );
}
}
return implode("\n",$line_array);
}
Теперь он сохраняет пустые строки, а текстовый файл выглядит построчно.
Ты можешь использовать Апач Тика В качестве законченного решения он предоставляет REST API.
Еще одна хорошая библиотека RawText, как он может сделать OCR над изображениями и извлечь текст из любого документа. Это не бесплатно и работает через REST API.
Пример кода, извлекающий ваш файл с помощью RawText:
$result = $rawText->extract($your_file)