Создаем DOC файл через php

теги: php  Разработка  css   Раздел: PHP

Бывают моменты, когда на лету нам нужно сгенерировать документ WORD. Но под рукой нет необходимых библиотек, а если они и есть, то форматирование текста с их помощью - довольно трудоёмкая задача. 

Иногда нужно просто создать файл отчета, распечатать договор, заполненный данными из профиля и многое другое, ну и конечно хочется сделать процесс генерации таких документов автоматически, без вмешательства пользователя.

С виду задача сложна, но давайте не будем забывать о том, что для каждой трудной задачи существует минимум 2 разных решения, одно из которых - сложное, второе - простое. Так давайте начнем с простого. Мы не будем использовать никаких сторонних библиотек, только PHP и наши знания html.

Сделаем шаблон нашего будущего документа.

 $WORD = 'MIME-Version: 1.0

Content-Location:
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="UTF-8"

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office"
xmlns:w=3D"urn:schemas-microsoft-com:office:word"
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=3DContent-Type content=3D"text/html; charset=3DUTF-8">
<meta name=3DProgId content=3DWord.Document>
<meta name=3DGenerator content=3D"Microsoft Word 11">
<meta name=3DOriginator content=3D"Microsoft Word 11">
<link rel=3DFile-List href=3D"test.files/filelist.xml">
<!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Print</w:View>
  <w:GrammarState>Clean</w:GrammarState>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState=3D"false" LatentStyleCount=3D"156">
 </w:LatentStyles>
</xml><![endif]-->
<style>
<!--
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
    {mso-style-parent:"";
    margin:0cm;
    margin-bottom:.0001pt;
    mso-pagination:widow-orphan;
    font-size:12.0pt;
    font-family:"Tahoma";
    mso-fareast-font-family:"Tahoma";}
@page Section1
    {size:595.3pt 841.9pt;
    margin:18.0pt 19.3pt 18.0pt 18.0pt;
    mso-header-margin:35.4pt;
    mso-footer-margin:35.4pt;
    mso-paper-source:0;}
div.Section1
    {page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
    {mso-style-name:"\041E\0431\044B\0447\043D\0430\044F \0442\0430\0431\043B\=
0438\0446\0430";
    mso-tstyle-rowband-size:0;
    mso-tstyle-colband-size:0;
    mso-style-noshow:yes;
    mso-style-parent:"";
    mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
    mso-para-margin:0cm;
    mso-para-margin-bottom:.0001pt;
    mso-pagination:widow-orphan;
    font-size:10.0pt;
    font-family:"Tahoma";
    mso-ansi-language:#0400;
    mso-fareast-language:#0400;
    mso-bidi-language:#0400;
    width:100%;
}

td.br1{
    border:1px solid black;
}
</style>
<![endif]-->
</head>

<body>
    <h1 align=3D"center">Первый файл DOC сделанных с помощью PHP и HTML</h3>


    <p>В теле документа вы можете использовать любые HTML теги для разметки. </p>

</body>

</html>';

Все делается с помощью HTML разметки, вставьте таблицу, задайте цвет текста, выравнивание, курсив и жирность и у вас появится отличный документ. Единственное что нужно помнить это префикс 3D который нужен для правильного понимания формата в тексте в теге H1 у тега align есть префикс 3D.

Дальше с нашей готовой строкой можно делать что угодно, допустим запишем её в файл на сервере.
 

 

$fp = fopen ("firstfile.doc", "w");
fwrite($fp,$WORD);
fclose($fp);


Ну а дальше делайте с этим файлом что хотите и как хотите.

Удачи на поприще программирования и поиска простых решений для сложных задач!

Написана: 26.01.2011 00:00 | Просмотров: 1157
Альберт добавлен - 06.05.2011 19:32
Не получилось. Office 2003 пишет: firstfile не является допустимой веб-страницей в одной файле.:(
Demura.su добавлен - 07.05.2011 22:40
2 Альберт Слушай, когда писал проверял на 2007, 2010 офисе, может в 2003 и не работает не знаю, не проверял.
Demura.su добавлен - 11.07.2011 18:20
В ближайшее время выложу новую статью про импорт отчетов в MS Excell. Ибо тема, как я смотрю, очень актуальна, по кол-ву запросов в яндексе и заходов на эту статью
К.О. добавлен - 12.05.2012 11:11
Файл не doc, а docx.
Это огромная разница. И, разумеется, он не поддерживается офисом 2003.
А, да. Велосипед.
Demura.su добавлен - 12.05.2012 13:16
Можно и doc написать. большой разницы не будет.
Автор
Email
Комментарий
Введите код c картинки: