Как преобразовать документ docx в html с помощью php?

Я хочу иметь возможность загружать документ MS Word и экспортировать его на моем сайте.

Есть ли способ сделать это?

Ответ 1

//FUNCTION :: read a docx file and return the string
function readDocx($filePath) {
    // Create new ZIP archive
    $zip = new ZipArchive;
    $dataFile = 'word/document.xml';
    // Open received archive file
    if (true === $zip->open($filePath)) {
        // 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 = DOMDocument::loadXML($data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            // Return data without XML formatting tags

            $contents = explode('\n',strip_tags($xml->saveXML()));
            $text = '';
            foreach($contents as $i=>$content) {
                $text .= $contents[$i];
            }
            return $text;
        }
        $zip->close();
    }
    // In case of failure return empty string
    return "";
}

ZipArchive и DOMDocument находятся внутри PHP, поэтому вам не нужно устанавливать/включать/требовать дополнительные библиотеки.

Ответ 2

Можно использовать PHPDocX.

Он поддерживает практически все стили CSS CSS. Кроме того, вы можете использовать шаблоны для добавления дополнительного форматирования в свой HTML через replaceTemplateVariableByHTML.

HTML-методы PHPDocX также позволяют прямое использование стилей Word. Вы можете использовать что-то вроде этого:

$docx->embedHTML($myHTML, array('tableStyle' => 'MediumGrid3-accent5PHPDOCX'));

Если вы хотите, чтобы все ваши таблицы использовались в стиле Word среды MediumGrid3-accent5. Метод embedHTML, а также его версия для шаблонов (replaceTemplateVariableByHTML) сохраняют наследование, а это значит, что вы можете использовать предопределенный стиль Word и переопределить с CSS любые его свойства.

Вы также можете извлечь выбранные части своего HTML с помощью селекторов типа JQuery.

Ответ 4

Вы можете конвертировать документы Word docx в html с помощью библиотеки Print2flash. Вот фрагмент PHP с моего клиентского сайта, который преобразует документ в html:

include("const.php");
$p2fServ = new COM("Print2Flash4.Server2");
$p2fServ->DefaultProfile->DocumentType=HTML5;
$p2fServ->ConvertFile($wordfile,$htmlFile);

Он преобразует документ, путь которого указан в переменной $wordfile в файл страницы html, указанный переменной $htmlFile. Все форматирование, гиперссылки и диаграммы сохраняются. Вы можете получить требуемый файл const.php в целом с более полным образцом из Print2flash SDK.

Ответ 5

Если вы не откажетесь от REST API, вы можете использовать:

  • Apache Tika. Является проверенным лидером OSS для текстовой экстракции.
  • Если вы не хотите нервничать с настройкой и хотите готовое решение, вы можете использовать RawText, но это не бесплатно.

Пример кода для RawText:

$result = $rawText -> parse($your_file)