За последние 24 часа нас посетили 33420 программистов и 1755 роботов. Сейчас ищет 1151 программист ...

PHP + WORD!

Тема в разделе "PHP для новичков", создана пользователем Mark32, 23 июн 2008.

  1. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    PHP:
    1.  
    2.  
    3. <?php
    4. $word = new COM("word.application");
    5.  
    6. $word->Visible = 0;
    7. $word->Documents->Add();
    8. $word->Selection->PageSetup->LeftMargin = '2"';
    9. $word->Selection->PageSetup->RightMargin = '2"';
    10.  
    11. //Setup the font
    12. $word->Selection->Font->Name = 'Verdana';
    13. $word->Selection->Font->Size = 8;
    14.  
    15. //Write some text
    16. $word->Selection->TypeText("This is a test document");
    17. //Save the document as DOC file
    18. $word->Documents[1]->SaveAs("c:\\docs\\test1.doc");
    19.  
    20. //quit and release COM resources
    21. $word->quit();
    22. $word->Release();
    23. $word = null;
    24.  
    25. ?>
    операция создаёт докумен в соотв. разделе жёсткого диска. Переменная в php попадает в сгенерированный файл .doc!
    Как ни пробовал - сохраняет собака только на жёсткий диск. А как сохранить на сервер - не понимаю.
    Кто-нибудь знакет как сделать это?
    Если кому надо узнать какие ф-ии используются для форматов - http://66.102.9.104/search?q=cache:...s+a+test+document");&hl=ru&ct=clnk&cd=1&gl=ru
    Пока только это сам изучаю. Если у кого есть какая инфа по этой теме, линкните в топик plz.
     
  2. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    ну, а потом копируй на сервер с помощью FTP / curl / socket
     
  3. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    не понял. это что значит, что всё равно у меня неа жёстком диске он будет вначале? не. надо чтобы сразу на серваке сохранялся. это что нереально?
     
  4. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    хотя логично представить что тут зависит уже не от php а от ворда. (или?)
    скажите, а с pdf такой фигни нет?
     
  5. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Mark32, вот ты попробуй из ворда документ сохранить сразу на удаленном фтп-сервере. как сможешь - пробуй его научить этому через com-соединение
     
  6. Anonymous

    Anonymous Guest

    Бле, вы вообще оба - о чем??
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Горбунов Олег
    Мне кажеццо, не совсем о
     
  8. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    лажа. да, никак не получиться.
    а pdf насколько я знаю можно генерить и сэйвить на серваке и всё by php
     
  9. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    PHP:
    1.  //Write some text
    2.  $word->Selection->TypeText("This is a test document");
    Открывается простой текст. А надо с форматированием разным. Насколько понимаю теги html не действуют здесь. Как бы реализовать в php вордовское форматирование?
    Подкиньте линк где можно почитать команды этого форматирования типа

    PHP:
    1.  
    2.  $word->Selection->PageSetup->LeftMargin = '2"';
    3.  $word->Selection->PageSetup->RightMargin = '2"';
    4.  $word->Selection->Font->Name = 'Verdana';
    5.  $word->Selection->Font->Size = 8;
    6.  
    типа как сделать с новой строчки, абзаца, жирным, курсивом... без догадок..:)

    Спасибо!
     
  10. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Документ Word - это архив, с описанием форматирования xml-ем, и файликом с данными, собственно.
    Поэтому теги html и не будут работать.
     
  11. Anonymous

    Anonymous Guest

    Во первых, архив, с описанием форматирования xml-ем, и файликом с данными, собственно - это docx
    Во вторых, HTML в doc работает.
    В третьих,
    очевидно, в описании Microsoft Office COM Automation. Найти что либо вменяемое почти без шансов. Можешь просто взять учебник по VBA
     
  12. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Нууууу...... Документ Word)))) Так ведь?))

    Олег, а что представляет из себя *.doc?
     
  13. Anonymous

    Anonymous Guest

    бинарный файл
     
  14. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Mark32
    млин.. что тебе мешает скопить средствами php файл по ftp и удалить его с локальной тачки после копирования (скриптом(!)) ?
     
  15. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    да не. надо чтобы именно в php прописаны были все переменные, ибо переменные в doc не вставить...
    "Во вторых, HTML в doc работает. "

    Олег, можешь на примере показать что нужно прописать в php чтобы например вставился жирный текст а внизу него стояла картинка?
     
  16. Anonymous

    Anonymous Guest

    в php надо только послать заголовок
    PHP:
    1. <? header('Content-type: application/x-ms-word');
    а потом выдать ему обычный HTML.
    That's all, folks!
     
  17. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    ????

    Может не правильно тебя понял...

    PHP:
    1.  
    2. header('Content-type: application/x-ms-word');
    3.  
    4.  $word = new COM("word.application");
    5.  
    6.  $word->Visible = 0;
    7.  $word->Documents->Add();
    8.  $word->Selection->PageSetup->LeftMargin = '2"';
    9.  $word->Selection->PageSetup->RightMargin = '2"';
    10.  
    11.  //Setup the font
    12.  $word->Selection->Font->Name = 'Verdana';
    13.  $word->Selection->Font->Size = 8;
    14.  
    15.  //Write some text
    16.  $word->Selection->TypeText("<b>Фоукс</b> привет");
    17.  //Save the document as DOC file
    18.  $word->Documents[1]->SaveAs("c:\\test1.doc");
    19.  
    20.  //quit and release COM resources
    21.  $word->quit();
    22.  $word->Release();
    23.  $word = null;
    24.  
    Итог - Cannot modify header information - headers already sent by
    А в документе текст вместе с тегами -

    Код (Text):
    1. <b>Фоукс</b> привет

    :(
     
  18. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    PHP:
    1. <?php
    2. $str = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    3.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    4.  
    5. <html>
    6. <head>
    7.  <title></title>
    8. </head>
    9. <body style="margin-left: 2px; margin-right: 2px;
    10.  font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 8pt">
    11. <b>Фокус</b> привет
    12. </body>
    13. </html>';
    14.  
    15. header('Pragma: public');
    16. header('Expires: 0');
    17. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    18. header('Cache-Control: public');
    19. header('Content-Description: File Transfer');
    20. header('Content-type: application/x-ms-word');
    21. header('Content-Disposition: attachment; filename="myfile.doc"');
    22. header('Content-Length: "'.strlen($str).'"');
    23. echo $str;
    24. ?>
    http://phpfaq.ru/header
     
  19. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    Лихо.
    А куда вообще файл myfile.doc сохраняется? :=)
     
  20. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    он налету генерируется. Из html'я
     
  21. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    э-э-э.. ясно.
    А где его посмотреть-то можно? :)
     
  22. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    с указанием имени ресурса на который оно будет копироваться. По имени через wins либо по ИП, а не через вебсервер. Так же указывается место куда копируется (имя шары). Для того, чтобы скопировать средсвтами скрипта нужно иметь доступ к целевому компьютеру, а именно - заранее провести авторизацию с компьютера, с которого будет копирование. Естесственно на целевом компьютере нужно иметь учетку пользователя (естесственно она должна позволять записать файл в нужую папку). Скорее всего проще будет подмапить диском папку с целевого компьютера и держать сессию авторизации (ну я обычно опрашиваю наличие файла-флага на удаленном компе раз в минуту), тогда и прокатит такой финт с копированием "на диск" - G:\www\ :)

    ЗЫ надеюсь я не ошибусь - компьютер целевой и "создающий" с Windows? :)
    Если на той стороне линух - наверное было бы проще курлом отправить мультипарт, либо написать скрипт приема и отдать постом в base64, оба варианта решаемы как на уповне ПХП, так и пригладной тулзой.
     
  23. Mark32

    Mark32 Активный пользователь

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    Luge очень интересный вариант предложил.
    На сервер мне уже не обязательно - мараться... удалённая машина юникс, рабочая виндовоз.... не интересно...
    В скрипте что я приводил есть строка $word->Documents[1]->SaveAs("c:\\test1.doc");
    А что никак нельзя сделать эту строку в скрипт Luge'а? Меня впролне устроило бы вызвать скрипт и он сохранит вордовский документ с добротным форматированием на локальный диск.
     
  24. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    не нужна нам чужая слава
    господи, да мозгами подумай!
    Твой перый вариант — только для сервака на винде. И положит он файл не на твой диск C, а на диск C сервака (если бы он на виннде работал).
    Я тебе показал как отдать на скачку .doc. Ну, не посылай заголовки, а сохрани этот html как мой_файл.doc . Вот и всё.
     
  25. Anonymous

    Anonymous Guest

    справидливость востаржествавала! 8)

    Я вариант предложил, а ты — готовое решение. Вот и отдувайся дальше сам. %)