За последние 24 часа нас посетил 21961 программист и 1671 робот. Сейчас ищут 1744 программиста ...

как внедрить изображение в документ word

Тема в разделе "Прочие вопросы по PHP", создана пользователем dablin3, 28 апр 2020.

  1. dablin3

    dablin3 Новичок

    С нами с:
    28 апр 2020
    Сообщения:
    3
    Симпатии:
    0
    Есть файлы "start.php" и "10.jpg", лежащие в коневом каталоге сайта. При запуске файла "start.php" код php создает файл "word.doc" c картинкой и текстом в том же каталоге. При открытии файла "word.doc" картинка внутри присутствует. Но если картинку удалить из каталога, при открытии файла "word.doc" вместо картинки видим красный крестик. Изображение не внедрилось в файл "word.doc", а вписано в виде ссылки на файл "10.jpg". Что изменить, чтобы изображение внедрялось в создаваемый файл "word.doc". Ниже содержимое файла "start.php".

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta
    http-equiv="Content-Type" content="text/html; charset=windows-1251">
    </head>
    <body>

    <?php
    $str = 'MIME-Version: 1.0
    Content-Location:
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/html; charset="windows-1251"

    <html xmlns:eek:=3D"urn:schemas-microsoft-com:eek:ffice:eek:ffice"
    xmlns:w=3D"urn:schemas-microsoft-com:eek:ffice:word"
    xmlns=3D"http://www.w3.org/html40">

    <head>
    <meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dwindows-1251">
    <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>
    <font size=3D"4">Зелёное с красным</font><br>
    <img src=3D"10.jpg">
    </body>
    </html>'
    ;

    $fp = fopen ("word.doc", "w");
    fwrite($fp,$str);
    fclose($fp);
    ?>

    </body>
    </html>

    P.S. Смайлики появились вместо комбинации символов "двоеточие+английское o". Не смог их убрать.
     

    Вложения:

    • 10.jpg
      10.jpg
      Размер файла:
      832 байт
      Просмотров:
      0
    #1 dablin3, 28 апр 2020
    Последнее редактирование: 28 апр 2020
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    749
    Адрес:
    Татарстан
    1. для оформления кода есть специальный тег
    2. обычно так "в лоб" никто не формирует документа. Используют спец библиотеки.
    3. Для "внедрения" можно попытаться записать картинку в base64 прямо в теле img
     
  3. dablin3

    dablin3 Новичок

    С нами с:
    28 апр 2020
    Сообщения:
    3
    Симпатии:
    0
    Несколько лет назад представленный здесь код работал - внедрял картинки в doc. Потом перестал. Возможно, я поменял версию php. Не знаю точно, что случилось. Не подскажете, что в php могло измениться?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    ошибки в логах должны присутствовать.
    Так же библиотеку обновить на нужную версию.
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    749
    Адрес:
    Татарстан
    1. Так он как бы и "внедряет" как вы пишете - если картинка в том же каталоге
    2. Ну посмотрите код, осмыслите его хоть маленько - вы просто формируете xml документ на основе html, где указываете картинку с путем ее размещения, если картинку удалит - ее конечно же не будет в принципе вообще в любой версии php
    3. опять повторюсь- так не делают. надо через спец. библиотеки формировать

    нет там никаких бибилотек....
     
  6. iceblood

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

    С нами с:
    20 фев 2020
    Сообщения:
    83
    Симпатии:
    12
    Если удалить картинку то ссылка сохранится. Картинки нет. Word говорит = крестик.
    "Что изменить, чтобы изображение внедрялось в создаваемый файл "word.doc". Добавить картинку соответствующию ссылке
    Код (Text):
    1. <img src=3D"10.jpg">
    Если картинка называется иначе - заменить ссылку.
     
  7. dablin3

    dablin3 Новичок

    С нами с:
    28 апр 2020
    Сообщения:
    3
    Симпатии:
    0
    Думаю, что в старом php создание файлов doc выполнялось по другому. Если в коде записана ссылка на картинку, то в документ вписывалась не ссылка, а сама картинка. Позже появились документы docx. Для них внедрять ничего не надо, так как картинки лежат рядом в архиве. Тогда в php запись файла командой fwrite($fp,$str); упростили. Теперь ссылки остаются ссылками.
    Проблему я решил, как смог. Вместе с созданным файлом doc в один архив добавляю и картинки. Если пользователь разархивирует zip-архив в одну папку, а не вытищит из zip-архива только doc-файл, то увидит картинки в doc-файле.
    Если бы я начинал решать эту задачу с нуля, то спецбиблиотеки для создания файла word были бы хорошей помощью. Но у меня уже создано больше 100 программок для создания разных doc-файлов. Слишком много пришлось бы переделывать.
    Спасибо за участие. Тема закрыта.