Зачастую требуется сгенерировать word-файл *.doc из HTML-страницы таким образом, чтобы в выходном файле сохранялись не ссылки на картинки, а сами картинки.
Решение для NetCat мы нашли с помощью идеи, изложенной на habrahabr.ru, и адаптировали его для NetCat. В прочем, скрипт подходит и для любой другой системы.
УСТАНОВКА
1. Распаковать архив в /netcat/modules/default/
2. На той странице, где нужно сделать кнопку "Сохранить в Word", вставляем примерно такой код:
<input type='button' value='Экспорт в Word' onclick='
document.getElementById(\"text\").value=FCKeditorAPI.GetInstance(\"f_ContractText\").GetXHTML();
document.getElementById(\"exp2word\").submit();' />
<form id='exp2word' method='post' action='/netcat/modules/default/wordgen.php'>
<input type='hidden' id='text' name='text' />
<input type='text' id='fname' name='fname' value='Договор 5' />
</form>
В данном случае появится кнопка, при нажатии которой скрипт возьмет HTML-содержимое из FCKEditor'а, подключенного к полю f_ContractText, и отправит его методом POST на наш скрипт wordgen.php.
ПРИНЦИП ДЕЙСТВИЯ
В скрипте wordgen.php имеется функция CreateDOC, на вход которой подается HTML-код со ссылками на картинки и имя выходного файла. Функция скачивает все нужные картинки по имеющимся в HTML ссылкам, конвертирует их в нужный формат, а затем все это оформляет в виде MHT-файла, которому присваивается имя *.doc.
Разумеется, это не настоящий MS Word файл, но он нормально открывается в Windows. В других ОС открываться скорее всего не будет, но у нас такой задачи и не было.
Будем рады, если решение кому-то будет полезным.
Комментарии 12
Возможно, вы вставили код в компонент 5-й версии неткат, где экранирование двойных кавычек не требуется.
Компонент версии 4.
Если в событие onclick вставляю другое событие - оно срабатывает.
<input type='button' value='Экспорт в Word' onclick='
$(\"#text\").val(
$(this).closest(\"table.contentpaneopen\").html();
);
$(\"#exp2word\").submit();
' />
Вместо table.contentpaneopen можете написать, например, #identifikator, а где-то на странице сделать <div id='identifikator'>...</div> - и содержимое этого дива пойдет как раз в word-файл.
[CODE]$(\"#text\").val( $(this).closest(\"table.contentpaneopen\").html() );[/CODE]
Только файл создался без расширения, просто тип "файл".