[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: экспорт PHP в Word
born
Всем доброго утра и хорошего настроения!
Я безусловно понимаю, что эта тема стара как мир, и набила всем оскомину, но перечитав форум, ознакомившись с FAQ и иными темами для новичков форума - все же решил создать эту тему.

Задача: посредством php страницы создать и сохранить в формате .doc (.docx все равно) следующий код <table border="1"> <tr><td>привет</td><td>еще раз</td></tr></table>
На выходе нужно получить word-файл c табличкой из двух ячеек с русскими словами. Кодировка используется в проекте utf-8.

Что предпринято: прежде всего PHPWord, однако он не читает html теги, далее нашел надстройку которая их читает, но он категорически не хочет принимать utf-8 (одни кракозябры). http://htmltodocx.codeplex.com/ вот линк... пока этот вариант совсем отпал и решил попробовать самый "простой" способ... найденный на просторах сети
<form action="word.php" method="POST">
<p>
<label><b>
Название документа:</b><br /> </label>
<input
name="docname" />
</p>
<p>
<label><b>
Ваше имя:</b><br /> </label>
<input
name="myself" />
</p>
<p>
<label><b>
Ваш текст:</b><br /> </label>
<textarea
name="text" rows="10" cols="25" tabindex="2"></textarea>
</p>
<input
type="submit" value="Создать документ!" />
</form>

вот простая форма...
далее идет обработчик
word.php

if (isset($_POST['docname']) && !empty($_POST['docname'])) $docname = $_POST['docname'];
if (isset($_POST['myself']) && !empty($_POST['myself'])) $myself = $_POST['myself'];
if (isset($_POST['text']) && !empty($_POST['text'])) $text = $_POST['text'];

if (isset($docname) && isset($myself) && isset($text)) {

header('Content-type: application/vnd.ms-word');
header('Content-Disposition: attachment;Filename=' . $docname . '.doc');
header("Content-Transfer-Encoding: binary");
//echo '<meta http-equiv=Content-Type content="text/html; charset=utf-8">';
// header('Content-type: application/vnd.ms-word');
// header('Content-Disposition: attachment;Filename=' . $docname . '.doc');

header('Content-type: text/html; charset=utf-8');
echo '<html>';
// echo '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">';
echo '<body>';
echo 'Автор: ' . $myself;
echo '<b>' . $text . '</b>';
echo '</body>';
echo '</html>';

}

закомментированы различные варианты/попытки...
все файлы созданы в кодировке utf-8 без BOM.

что имею на выходе... создается word документ в формате веб-страницы, но кодировка не срабатывает. Далее жму Параментры Word - дополнительно - в самом низу Параметры веб-документа - Кодировка (там отображается.. Загрузить текущий документ как: Кириллица), меняю на UTF-8 и вуаля ... все по-русски.

Попытки поставить это все по умолчанию успехов не увенчались(((
в связи с этим хотел бы просить совета, как это все "починить" и реализовать в самом удобном формате...
уверен, что готовое решение станет реальным подспорьем для многих начинающих. Заранее спасибо и хорошего рабочего дня)



Спустя 5 минут, 2 секунды (12.03.2012 - 07:46) rooor написал(а):
функция iconv не поможет?

Спустя 1 минута, 6 секунд (12.03.2012 - 07:48) ADiel написал(а):
header("Content-Transfer-Encoding: binary"); разве?

Спустя 1 минута, 19 секунд (12.03.2012 - 07:49) born написал(а):
iconv в этом варианте не пробовал - в htmldocx не помогает(((

про binary и так пробовал и без оного...

Спустя 19 минут, 1 секунда (12.03.2012 - 08:08) ADiel написал(а):
У меня офиса нет, но есть openoffice
И сохраняет в формате html он так:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META
HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1251">
<TITLE></TITLE>
<META
NAME="GENERATOR" CONTENT="OpenOffice.org 3.3 (Win32)">
<META
NAME="CREATED" CONTENT="0;0">
<META
NAME="CHANGED" CONTENT="20120312;9070204">
</HEAD>
<BODY
LANG="ru-RU" LINK="#000080" VLINK="#800000" DIR="LTR">
<P><B>
ГЫ абыр абырвал</B></P>
</BODY>
</HTML>



Может и не utf-8 нужно использовать?

Спустя 26 минут, 59 секунд (12.03.2012 - 08:35) born написал(а):
utf-8 ... у меня вся БД на ней построена.
попробую конечно iconv.. только непонятно что на что конвертировать. потому что detect выдает utf-8.

Спустя 18 минут, 16 секунд (12.03.2012 - 08:53) alex12060 написал(а):
Пробуй в rtf, это реально проще.

Спустя 32 минуты, 35 секунд (12.03.2012 - 09:26) born написал(а):
проще то проще) но чуть-чуть же осталось... как передать в ворд нужный заголовок - ведь многие это уже реализовали... но конкретно у меня не срабатывает(

а с htmldocx вообще обидно. реально здоровская утилита - работает - все четко, но с русским не дружит(

Спустя 3 минуты, 23 секунды (12.03.2012 - 09:29) alex12060 написал(а):
Пробуй iconv() как тебе посоветовали.

Спустя 12 минут, 43 секунды (12.03.2012 - 09:42) born написал(а):
хех - iconv помог.
сделал сборку
$html='';
$html=$html.'<html>';
$html=$html.'<body>';
$html=$html.'Автор: ' . $myself;
$html=$html.'<b>' . $text . '</b>';
$html=$html.'</body>';
$html=$html.'</html>';

$html2=iconv ("utf-8","windows-1251",$html);
echo $html

вывел в ворд все по-русски.
спасибо за соучастие) но я думаю, что тему еще разовью...

Спустя 11 часов, 40 минут, 32 секунды (12.03.2012 - 21:22) born написал(а):
я буду скромного о себе мнения, но я все таки сделал ЭТО!!! долго ли коротко ли... но htmltodocx теперь говорит на русском языке!!!! разворачивает ворд в альбомный вид, читает теги... полный Яху)))
теперь осталось решить маааааленькую задачу)

этот класс? построен по следующему принципу...
$html = file_get_contents('example_files/example_html.html');

это ключевая команда... забирает html содержимое
в этом файле у меня, например одна строка <h1> Мы победили - yeah! </h1>

в итоге все срабатывает... все в ворде как надо. но задача то конечная, подключить это все дело к БД. вот тут я застрял(((
делаю так:
$html = file_get_contents('example_files/base.php');


<?
require_once("../../config_2012.php");


$query2="SELECT * FROM b117556_mon2012.f4_1_1";
$result2=mysql_query($query2) or die ("неверный запрос".mysql_error());

$html='<table border="1">';

while ($row=mysql_fetch_array($result2)){
$html=$html.'<tr>';

$html=$html.'<td>'.$row[0].'</td>'.'<td>'.$row[1].'</td>'.'<td>'.$row[2].'</td>';

$html=$html.'</tr>';
}
$html=$html.'</table>';

return $html;
// echo $html;
// print $html;

?>


или так...

<table border="1">
<?
while ($row=mysql_fetch_array($result2)){
?>
<tr> <td><?=$row[0];?></td> <td><?=$row[1];?></td> <td><?=$row[2];?></td></tr>
<?
}
?>
</table>

понимаю, что извращение конечно...
при этом

<table border="1">

<tr> <td>
1</td> <td>чва</td> <td>хря</td></tr>

</table>

рисует вполне добротную табличку...

как быть? как достать чистый html из php файла?
уверен, что если мы сейчас это решим... это будет очень красивое решение - в библиотеку однозначно;) сорри за излишние эмоции;)

Спустя 2 часа, 14 минут, 34 секунды (12.03.2012 - 23:37) born написал(а):
в общем "привет" прилетел как всегда откуда не ждешь... ((( видимо пора отдыхать... вот что я сделал.

$h = fopen("my.html","r");
$text = "Этот текст запишем в файл.";
if (fwrite($h,$html))
echo "Запись прошла успешно";
else
echo "Произошла ошибка при записи данных";
fclose($h);

$html берется из вышеуказанного кода... все нормаль. файл записался - все четко...

теперь я его начинаю "забирать" ... и что получаю? правильно...
"не удается открыть файл из-за ошибок его содержимого.. недопустимый знак xml. Местоположение Часть:/word/document.xml строка 56, столбец 96...

методом научного тыка начал искать где засада...
в общем он не "читает", не срабатывает на русскую заглавную букву Р (эр), и на какое-то пустое место... ( ) вы не поверите, но между скобками оно и есть... вырезал и вставил... ибо если я его из кода убираю - файл начинает работать.
остальное все проверил (алфавит, знаки) все фурычит... грешным делом думаю это какой-нить спец. символ? аля альт-энтер? ^p? ибо скопировав его и вставив в автозамену он мне таких заменил порядка 15 в документе... значит явно не пусто.
что посоветуете? как этого всего избежать и что это вообще?

Спустя 2 часа, 23 минуты, 59 секунд (13.03.2012 - 02:01) FatCat написал(а):
http://phpforum.ru/index.php?act=Print&cli...r&f=125&t=58723 - так нормально?
Рекомендую открыть файл блокнотом, сразу все станет понятно.

Спустя 7 часов, 21 минута, 11 секунд (13.03.2012 - 09:22) born написал(а):
спасибо, я встречал на форуме Ваш пример... внешне выглядит конечно здорово, но не получилось сходу догнать...
блокнотом открыть получается только в качестве сохраненной веб-страницы... и там просто куча всего лишнего и понятным от этого не становится(
все же хотелось бы до конца разобраться с тем примером что я привел...

Спустя 8 дней, 10 часов, 50 минут, 49 секунд (21.03.2012 - 20:13) born написал(а):
продвижение хорошее... уже 5-6 различных вариантов попробовал - задачу решает! на выбор ексель либо ворд, книжный либо альбомный.. все ок!
теперь вот в чем засада - в БД хранятся ссылки на изображения. Соответственно приходит код

<img src="files/123.png"> все бы ничего - но когда сохраняешь в ворд - то соответственно если файл не в корне, то и картинки нет. Хочется записывать картинку напрямую!

начитался про base64... получаю
<img src="data:image/png;base64, куча кода"> - в веб сохраняется и отображается норм... а вот в ворд уже не экспортируется(
какие могут быть решения? буду признателен за совет

Спустя 5 минут, 39 секунд (21.03.2012 - 20:19) Игорь_Vasinsky написал(а):
Цитата
абырвал

абырвалг!


Спустя 44 минуты, 14 секунд (21.03.2012 - 21:03) born написал(а):
в общем вопрос получился дурной - сорри - слишком все усложнил.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.