- PHP: Как сохранить HTML в DOC
- Saved searches
- Use saved searches to filter your results more quickly
- License
- Korchy/html_to_doc
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- HTML с картинками в DOC на PHP собственными руками
PHP: Как сохранить HTML в DOC
При разработке онлайн-проектов часто возникает необходимость сохранить html-страничку в виде документа, который можно использовать отдельно, например, отправить по электронной почте, просматривать и редактировать оффлайн. Удобным способом сохранения html таким образом является экспорт в один из наиболее часто используемых текстовых форматов — doc.
Для экспорта html документа в формат doc можно воспользоваться открытым бесплатным php-модулем «html_to_doc». С его помощью можно сохранить html в документ doc, который будет корректно обработан текстовым редактором MS Word. Если в html-страничке присутствуют изображения, они будут встроены в документ doc.
Скачайте файл ExportToWord.inc.php и включите его в свой проект.
Весь код модуля размещается в одном файле ExportToWord.inc.php. Достаточно разместить его в директории проекта, ничего дополнительно устанавливать не нужно.
В самом файле для корректной работы нужно отредактировать следующие параметры:
- $imgRef — укажите относительный (от корня проекта) путь к директории, где размещаются изображения, включенные в html-код.
- $imgDir — укажите полный (абсолютный) путь к той же самой директории с используемыми изображениями.
Использование:
С помощью директивы require или include подключите модуль ExportToWord.inc.php в код своего проекта.
Для сохранения html-кода в документ doc вызовите функцию ExportToWord::htmlToDoc() из подключенного модуля, передав в параметрах собственно html, таблицу стилей css и имя файла с путем, по которому нужно поместить готовый документ doc.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
License
Korchy/html_to_doc
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
This php class enables to convert HTML document to DOC format.
Supports embeding images to the destination doc document.
- Copy ExportToWord.inc.php to some directory of your project.
- Change $imgRef and $imgDir static variables in the ExportToWord.inc.php file with your project images paths.
- Use require_once to include ExportToWord class to your project file.
- Call ExportToWord::htmlToDoc function from your project file to convert HTML to DOC.
require_once(dirname(dirname(__FILE__)).'/ExportToWord.inc.php'); $html = 'Test'; $css = '.test '; $fileName = 'c:/test.doc'; ExportToWord::htmlToDoc($html, $css, $fileName);
test.php — file with sample code of using HTML — DOC converter
test.html — file with sample html body. The same html body used in the test.php file.
test.doc — converted to DOC html file (with test.html body)
HTML с картинками в DOC на PHP собственными руками
В статье Не очень честная генерация DOC файлов на PHP был описан описан способ генерации DOC файла при помощи генерации MHT (MIME HTML) используя стороннюю библиотеку. Сегодня я расскажу о своей собственной генерации в этот формат. Плюсы моего способа следующие:
1) В OpenOffice читаемый текст и картинки.
2) В Word открывается файл в электронном виде, а не на весь экран.
3) Наш скрипт будет принимать HTML и отдавать сразу DOC файл на скачивание.
Ко всему прочему, вы поймете как преобразовать голый HTML в MHT собственными руками. Ошибки если и будут, то копаться в коде будет проще.
Начнем с функции, которая отдаст DOC файл на скачивание и будет работать во всех браузерах и со всеми протоколами(у меня с этим были проблемы):
/* Отсылаем файл на закачку */ function send_download($filename, $charset = 'cp1251') < header ($_SERVER["SERVER_PROTOCOL"] . ' 200 OK'); if (ereg('Opera(/| )(3.1)', $_SERVER['HTTP_USER_AGENT'])) $UserBrowser = "Opera"; elseif (ereg('MSIE (8.7)', $_SERVER['HTTP_USER_AGENT'])) $UserBrowser = "IE"; else $UserBrowser = ''; $mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' : 'application/octet-stream'; header("Content-Type: application/msword; charset=".$charset); $ua = (isset($_SERVER['HTTP_USER_AGENT']))?$_SERVER['HTTP_USER_AGENT']:''; $isMSIE = preg_match('@MSIE (5.3)@', $ua); if ($isMSIE) < header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); >else < header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Pragma: no-cache'); >>
Теперь перейдем к самой генерации DOC файла, для этого создадим форму, которая будет отправлять нам html с картинками, картинки лежат на нашем сайте.
Преобразовывать изображения мы будем при помощи base64, создадим функцию — callback для этого:
/* Преобразование изображений */ function prepareImage($matches) < global $IMAGES, $IMAGE_NAMES, $IMAGE_COUNT,$gldir,$SITE; $imgfile = $_SERVER['DOCUMENT_ROOT'].'/'.$matches[2]; $imgbinary = fread(fopen($imgfile, "r"), filesize($imgfile)); $url = $SITE.$matches[1]; $data = chunk_split(base64_encode($imgbinary)); $IMAGE_COUNT++; $ext = substr($matches[2], strpos($matches[2], '.') + 1, strlen($matches[2])); $imgName = 'images'.$IMAGE_COUNT.'.'.$ext; $IMAGES .= ' --doc_file_part_na_habrahabr Content-Location: '.$gldir.'images/'.$imgName.' Content-Transfer-Encoding: base64 Content-Type: image/'.$ext.' '.$data.' '; $pr1 = $matches[1]; $pr2 = $matches[3]; $IMAGE_NAMES .= ' '; return ''; >
Сразу извиняюсь, за то, что код написан в функциях, а все данные храниться в глобальных переменных. Код был написан, когда я ещё только начинал писать на PHP. Теперь создадим функцию, которая поможет нам с текстом, чтобы он хотя бы читался и в OpenOffice.
/* Преобразование текста */ function xml_entities($text, $charset = 'cp1251')< global $SITE; /* Ищем изображения и добавляем их в файл */ $text = preg_replace_callback( '//', "prepareImage", $text); /* Преобразовываем ссылки относительные на глобальные */ $text = preg_replace('/href="/','href=3D"'.$SITE, $text); /* Все пробелы должны быть закодированы как =3D, 3D - это шестнадцатиричный код пробела */ $text = preg_replace('/=(?=[^3])/','=3D',$text); $text = preg_replace('/\s?=\s?"/','=3D"',$text); /* Кодируем текст, чтобы читался в OpenOffice */ $text = htmlentities($text, null, $charset); $fi = array(""","&","'",""); $re = array('"',"&","'",""); return str_replace($fi, $re, $text); >
global $SITE; /* Имя сайта, на который будут вести ссылки и с которого нужно будет загрузить изображения */ $SITE = 'http://pihpi.ru'; function htmlToDoc($name, $html, $charset = 'cp1251') < $nameFile = $name.'.doc'; global $IMAGES, $IMAGE_NAMES, $IMAGE_COUNT, $gldir, $SITE; $IMAGE_COUNT = 0; $IMAGE_NAMES = ''; $IMAGES = ''; $gldir = 'file:///C:/AF22D505/'; /* doc_file_part_na_habrahabr - это название части файла может быть любым. Для того, чтобы узнать подробнее, читайте про MIME или как отправить по почте файл с картинками, аналогия очевидна. */ $head = 'MIME-Version: 1.0 Content-Type: multipart/related; boundary="doc_file_part_na_habrahabr" --doc_file_part_na_habrahabr Content-Location: '.$gldir.$nameFile.' Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="windows-1251"