-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
генерация rtf документа из ШАБЛОНА с помощью php
Здравствуйте!
Не работает подставка значений в заменител (<<name>>):
PHP код:
//выбор приложения для визуализации
header('Content-Type: application/msword');
header('Content-Disposition: inline, filename=cert.rtf');
$name1="Ivan";
//открыть файл шаблона
$filename = 'PHPCert.rtf';
$output = file_get_contents($filename);
//замена заполнителей в шаблоне
$output = str_replace("<<name>>",$name1,$output);
//отправить сгенерированный документ в браузер
echo $output;
|
Sham, скажите мне пожалуйста,
вот у меня есть обычный вордовский документ - как мне туда вставить данные из БД с помощью php?
|
Цитата:
Цитата zvezda_t
обычный вордовский документ »
|
Это doc(x)? Проприетарный формат (закрытый то бишь), т.е. нормально изменять получиться только средствами MS, обычно через COM-объекты (готовых скриптов море).
Если речь о RTF-файле, то другое дело. RTF - открытый формат, редактируется в текстовом редакторе, и в MS Word. Можно поискать PHP-библиотеки для работы с rtf, но если требуется только поиск-замена, то имхо необязательно.
Кириллица в rtf преобразуется (не в открытом виде), хотя word и кириллицу понимает, хз.
|
А возможно из обычного word1.doc сделать rtf файл - чтоб уже в нём проще было работать с заменителями?
Можно какой нибудь примерчик - как используя com объекты заменить значения в шаблоне???
|
Цитата:
Цитата zvezda_t
из обычного word1.doc сделать rtf файл »
|
если открыть в Word: меню Файл - Сохранить как - Текст в формате rtf (из списка "тип файла").
Цитата:
Цитата zvezda_t
как используя com объекты заменить значения в шаблоне »
|
посмотрите тут. Для PHP - имхо это изврат. RTF для этого больше подходит (с ним можно работать, как с текстовым файлом).
|
Цитата:
Цитата Sham
если открыть в Word: меню Файл - Сохранить как - Текст в формате rtf (из списка "тип файла"). »
|
я так и сделала, а потом вставила в текст документа: <<name>>
и использую скрипт из первого сообщения - замена не происходит(((
Закоментировала строчки:
//header('Content-Type: application/msword');
//header('Content-Disposition: inline, filename=cert.rtf');
и посмотрела в браузере что выводит:
Цитата:
{\rtf1\ansi\ansicpg1251\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1049\deflangfe104 9{\fonttbl{\f0\froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\f1\fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial;}{\f2\fmodern\fcharset204\fprq1{\*\panose 02070309020205020404}Courier New;}{\f35\fswiss\fcharset204\fprq2{\*\panose 020b0604030504040204}Tahoma;} {\f36\fmodern\fcharset0\fprq1{\*\panose 02060609020000020004}Consultant{\*\falt Courier New};}{\f72\froman\fcharset0\fprq2 Times New Roman;}{\f70\froman\fcharset238\fprq2 Times New Roman CE;}{\f73\froman\fcharset161\fprq2 Times New Roman Greek;} {\f74\froman\fcharset162\fprq2 Times New Roman Tur;}{\f75\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f77\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f78
|
своего заменителя я там не нашла... Я что то не так делаю?
|
Цитата:
Цитата Sham
посмотрите тут. Для PHP - имхо это изврат. »
|
скачала класс для работы с com объектами, но там нет методов для вставки своих данных в шаблон...
можно только открыть, поставить закладку и сохранить документ((
|
у меня сохраняет <<name>>. Наверно это касается только чистого doc(x) (не шаблон, без всяких спец-полей). Сохраните шаблон как обычный doc, и все спец-поля замените на простой текст <<>>, т.е. текст без всяких примочек word. Этот doc уже в rtf.
Цитата:
Цитата zvezda_t
но там нет методов для вставки своих данных в шаблон »
|
имхо, это общий пример. Изучайте скриптинг для Word (справка по скриптингу в нем есть). Имхо можно разобраться.
|
Цитата:
Цитата Sham
Наверно это касается только чистого doc(x) (не шаблон, без всяких спец-полей). Сохраните шаблон как обычный doc, и все спец-поля замените на простой текст <<>>, т.е. текст без всяких примочек word. Этот doc уже в rtf. »
|
Да, сохранила как Вы сказали - получилось) Большое спасибо!!! :-)
В итоге полученный файл сохраняется как .doc - то есть этот метод позволяет получить стандартный вордовский документ? (пользователи хотят на выходе иметь именно документ word)
Скажите пожалуйста, этот метод надёжный?
|
Цитата:
Цитата zvezda_t
В итоге полученный файл сохраняется как .doc »
|
в этом формате (doc) можно сохранить только самим вордом. RTF - это текстовый файл, который можно редактировать в ворде. имхо юзеру все равно, какое расширение у файла, главное, что можно открыть и отредактировать в ворде (если не нужны какие-то особые примочки от MS).
если нужен именно формат doc, то c COM можно сохранить rtf-файл в doc, и отдавать уже его. Если нужна сложная обработка ворд-файла, то изучайте объекты/свойства Word для макросов/скриптов, или поищите готовые макросы...
|
Цитата:
Цитата Sham
если нужен именно формат doc, то c COM можно сохранить rtf-файл в doc, и отдавать уже его. »
|
то есть сначала обработать мой rtf файл, а потом сохранить его как .doc?
как его так сохранить? :)
|
хз, имхо как в примере к классу :) (не тестил)
PHP код:
<?php require_once("clsWord.php");
$input = "C:\\Doc1.rtf"; $output = "C:\\Doc1.doc";
$Word = new clsMSWord; $Word->Open($input); $Word->SaveAs($output); $Word->Quit();
?>
|
а если я в заголовке вывожу как .doc - это не тоже самое?
PHP код:
//выбор приложения для визуализации
header('Content-Type: application/msword');
header('Content-Disposition: inline, filename=cert.doc');
$name1="Ivan";
//открыть файл шаблона
$filename = 'PHPCert.rtf';
$output = file_get_contents($filename);
//замена заполнителей в шаблоне
$output = str_replace("<<name>>",$name1,$output);
//отправить сгенерированный документ в браузер
echo $output;
|
хе-хе, открывается...
формат все-равно будет rtf, даже если расширение будет .doc. Если это устраивает, то ок, но поведение word в этом случае надо отследить. Наверное, при сохранении юзером формат преобразуется в doc.
upd
не, формат не меняется при сохранении (word2003). Но имхо может поменяться при использовании какой-то чисто вордовской примочкой...
|
что то я запуталась...
А если с помощью html разметки сформировать документ и вывести через заголовки, то какой формат у документа будет?
PHP код:
header("Content-type: application/vnd.ms-word"); header("Content-Disposition: attachment;Filename=document_name.doc"); echo "<html>"; echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">"; echo "<body>"; echo "<b>Тело моего документа</b>"; echo "</body>"; echo "</html>";
|
Формат html, расширение doc :). Это поведение той программы, с помощью которой открывается файл (видимо ворд не обращает внимание на расширение).
|
получается формат не имеет значения?
главное сохранить с расширением .doc?
|
формат имеет значение, у каждого формата свои ограничения. rtf имхо наиболее сопоставим с doc. В остальном - зависит от софта.
|
Время: 21:21.
© OSzone.net 2001-