muravey Можно в google поискать готовую библиотеку для этого или попробовать написать самостоятельно, изучив формат rtf, вот например ссылка на формат rtf http://www.codenet.ru/progr/formt/rtf1.php Не знаю что будет сложнее разобраться с готовой библиотекой или написать свое
jei Правильно, я не шарю. И не пытаюсь рассказать как "нужно сделать". Человек задает вопрос - как динамически создать RTF-файл. Если ты с такой задачей не сталкивался, то зачем лезешь и советуешь х..ню?
jei От Ваших сообщений на самом деле болит голова, человек все прекрасно объяснил, а ты то ли дурака начинаешь включать, то ли над человеком издеваться, тут даже не сведующий в программировании человек поймет вопрос, ответит естественно только сведующий)) +1 А что касается перегона в РТФ, то советую использовать одну из готовых библиотек (если конечно нет уймы свободного времени разбираться с форматом), просто опробуй несколько библиотек на простых примерах, выбери получше и построй на ней свой скрипт (гуголь "php rtf")
В принципе можно обычную html таблицу отправлять, просто заголовки нужные поставить Например так: PHP: <?php $tblBody = ''; $arr = array( array('first_row_1', 'first_row_2', 'first_row_3'), array('second_row_1', 'second_row_1', 'second_row_1') ); foreach($arr as $row) $tblBody .= " <tr><td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td></tr>\r\n"; header('Content-type: application/msword'); header('Content-Disposition: inline, filename=rtf.rtf'); ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> </head> <body> <table border="1" cellpadding="0" cellspacing="0"> <?php echo($tblBody); ?> </table> </body> </html> И MS Word и OOo Writer вполне даже откроют такое.
Ну давай умник покажи как сделать подобную задачу.А мы все посмотрим и признаем в тебе мастера.Если ты конечно просто не п......
jei Я же написал, что не лезу(в отличие от некоторых) - так как с подобной задачей не сталкивался. Эксель - могу рассказать, RTF - увы.
Говорю сразу - решение не лучшее, подойдет для Excel2003 и выше, в более ранних вряд ли откроется файл. но вполне рабочее: 1) Создаешь в Экселе документ, аналог которого хочешь получить. Причем сразу с нужной разметкой, шрифтами и прочим (чтобы потом не заморачиваться этим в рнр). Заполняешь его тестовыми данными. 2) Сохраняешь его как xml-документ. 3) Открываешь в любом редакторе, поддерживающем синтаксис xml (я в нетбинсе работаю, может и notepad++ подойти). Видишь что-то типа Код (Text): <?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?> <Workbook xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel"> <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"> <Colors> <Color> <Index>3</Index> и т.д. 4) Находишь где введены тестовые данные. Например у нас таблица из 3х столбцов. Код (Text): <Row ss:Height="13.5496"> <Cell> <Data ss:Type="Number">12</Data> </Cell> <Cell> <Data ss:Type="Number">84</Data> </Cell> <Cell> <Data ss:Type="Number">45</Data> </Cell> <Cell ss:Index="6"/> </Row> <Row ss:Height="13.5496"> <Cell> <Data ss:Type="Number">13</Data> </Cell> <Cell> <Data ss:Type="Number">41</Data> </Cell> <Cell> <Data ss:Type="Number">85</Data> </Cell> <Cell ss:Index="6"/> </Row> <Row ss:Height="13.5496"> <Cell> <Data ss:Type="Number">654</Data> </Cell> <Cell> <Data ss:Type="Number">65</Data> </Cell> <Cell> <Data ss:Type="Number">45</Data> </Cell> <Cell ss:Index="6"/> </Row> В данном примере у нас 3 ряда, но их число в получаемом документе неизвестно. Копируем 1 ряд, лишнее обрезаем, подставляем переменные, короче говоря - обычный цикл PHP: <? while ($row = mysql_fetch_assoc($result)): ?> <Row ss:Height="13.5496"> <Cell> <Data ss:Type="Number"><?php echo $row['price'] ?></Data> </Cell> <Cell> <Data ss:Type="Number"><?php echo $row['percent'] ?></Data> </Cell> <Cell> <Data ss:Type="Number"><?php echo $row['number'] ?></Data> </Cell> <Cell ss:Index="6"/> </Row> <? endwhile;?> 5) Ну и как правильно сказал выше sobachnik важно отправить правильный заголовок в начале, например header('Content-type: application/vnd.ms-excel'); хотя для экселя есть несколько вариантов. Какой именно отправлял сейчас не вспомню. Таким образом - можно и формулы Экселевские формировать, точнее создавать их в исходном документе, а в рнр - подсчитывать какие именно ячейки попадут в формулу (например используя mysql_num_rows). В своем случае - считал простые суммы столбцов. Это общая идея)) Есть вопросы - задавай) А вообще существует библиотека - phpExcel. Возможно правильнее будет её освоить[/code]
ЗДОРОВО работает. Я сейчас этот алгоритм реализую в своем проекте и потом поделюсь результатом и скриптом кому нуно! ОК! Но это уже другая тема http://www.php.ru/forum/viewtopic.php?t=29423 Но парни с RTF тоже нуно!
http://deep.webest.net/forum/17364/1/ В этом обсуждении много полезных ссылок. Там приводятся ссылки на спецификации по rtf, причём есть и русские, как я понял. Ну и некоторые команды rtf-ные приводятся в самом топике. Если есть время - самый лучший вариант, как мне кажется, это посидеть, почитать, во всём разобраться и самому написать класс (или хотя бы набор функций) для генерации rtf документов. Это вполне реально сделать. Я бы сам занялся с удовольствием написанием такой штуковины, но на это надо потратить немало времени, которого у меня сейчас практически нет...
А по поводу готовых библиотек - я нашёл парочку, но ни в одной нету генерации таблиц... То есть они совсем-таки простенькие и генерят не сложные rtf. Есть и более функциональные классы, которые могут генерировать полноценные rtf-ы и использовать все возможные для rtf функции, но их бесплатно разработчики не отдают - от 50 $ и выше... Хотя может я просто не нашёл
Порекомендовали библиотеку PHPRtfLite http://www.softtime.ru/forum/files/78065-20101228182846.zip Испробую потом поделюсь опытом.