Генерация word документа на php (шаблон .docx)
В этом уроке мы научимся создавать word документы .docx по заготовленному шаблону.

Наложение текста на картинку при помощи php не такая уж и сложная задача, главное разобраться с функцией imagettftext(), которая имеет ряд параметров:
imagettftext(‘Фон или фотка’, ‘Размер шрифта’, ‘Угол наклона’, ‘Координат оп оси X’, ‘Координат оп оси Y’, ‘Цвет шрифта’, ‘Путь к файлу со шрифтом’, ‘Любой текст’)
Фон или фотка = imagecreatefromjpeg("images/img.jpg") - (в нашем случае это изображение)Размер шрифта = 22 — 22pxУгол наклона = 30 — 30 градусов наклон надписиКоординат оп оси Y = 200 — 200 пикселей отступ сверхуКоординат оп оси X = 100 — 100 пикселей отступ слеваЦвет шрифта = imageColorAllocate('Фон или фотка', 255, 255, 255) — возвращает идентификатор цвета, представляющий цвет, составленный из данных RGB-компонентов.Путь к файлу со шрифтом = "fonts_capcha/tahoma.ttf" — тут все понятноЛюбой текст = 'Тект который мы будем накладывать на фотку'Наложение текста по центру исходной картинки, то есть если вы подставите свой фон для наложения текста, то он все ровно будет расположен по центру. Так же мы добавили в код обводку на текст, для того что бы на светлых тонах фонового ихзображения, текст все ровно выделялся и удобно читался пользователем.
Обводка на текст при помощи php создается очень просто — нужно всего лишь создать такие же текста функцией imagettftext(), но на 1,2 пикселя смещая координаты.
$imgage_path = "images/img.jpg"; //Путь к изображению
$text = $_GET['text']; //Забираем тест, который мы написали
$img = imagecreatefromjpeg($imgage_path); // создаём новое изображение из файла
$font = "fonts_capcha/tahoma.ttf"; // путь к шрифту
$font_size = 22; // размер шрифта
$color = imageColorAllocate($img, 255, 255, 255); //Цвет шрифта
$shadow = imageColorAllocate($img, 0, 0, 0); // цвет обводки (черный цвет)
$size=getimagesize($imgage_path); //Узнаем размер изображения
$w=(int)$size[0]; // ширина
$h=(int)$size[1]; // высота
// текст по центру
$box = imagettfbbox($font_size, 0, $font, $text);
$x = ($w/2)-($box[2]-$box[0])/2; //по оси x
$y = ($h/2)-($box[3]-$box[5])/2; //по оси y
//Обводка
imagettftext($img, $font_size, 0, $x+2, $y, $shadow, $font, $text);
imagettftext($img, $font_size, 0, $x-2, $y, $shadow, $font, $text);
imagettftext($img, $font_size, 0, $x, $y+2, $shadow, $font, $text);
imagettftext($img, $font_size, 0, $x, $y-2, $shadow, $font, $text);
imagettftext($img, $font_size, 0, $x+1, $y, $shadow, $font, $text);
imagettftext($img, $font_size, 0, $x-1, $y, $shadow, $font, $text);
imagettftext($img, $font_size, 0, $x, $y+1, $shadow, $font, $text);
imagettftext($img, $font_size, 0, $x, $y-1, $shadow, $font, $text);
//Разметка самого текста
imagettftext($img, $font_size, 0, $x, $y, $color, $font, $text);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);Наложение текста по центру
imagettfbbox() возвращает массив из 8 элементов, представляющих 4 точки, образующие бокс текста:
0- нижний левый угол, X-позиция
1- нижний левый угол, Y-позиция
2- нижний правый угол, X-позиция
3- нижний правый угол, Y-позиция
4- верхний правый угол, X-позиция
5- верхний правый угол, Y-позиция
6- верхний левый угол, X-позиция
7- верхний левый угол, Y-позиция
Разметку мы делаем для наглядного примера и удобного теста.
<form onsubmit="return false" id="createForm" >
<div class=""><textarea type="text" name="text" id="textcreate"></textarea></div>
<div class=""><button onclick="createImage()">Прикрепить</button></div>
</form>
<div id="result"></div>function createImage()
{
var textcreate = $("#textcreate").val();
$("#result").html("<img src=\"create_image.php?text="+textcreate+"\" />")
}Напиши комментарий и поделись своим мнением, все ли у тебя получилось, какие сложности возникли или просто напиши спасибо за статью
Не хотите разбираться с кодом самостоятельно? Я могу установить, настроить и адаптировать решение под ваш сайт или разработать аналогичную функциональность под ваши требования.
Обратиться за помощью
Отличный материал, подан просто ясно!
А если можно, то добавте в код строку, чтобы два текста выходило и шрифты разные были, заранее спасибо!
Предложу быстрый вариант.
1 шаг. Можно добавить в код html еще один инпут (это будет наш второй текст)
2 шаг. Вставить еще одну функцию для второго текста, только с указанием других координат
imagettftext($img, $font_size, 0, «Тут задаем координат по X», «Тут задаем координат по Y», $color, «Путь 2-го шрифта», «Второй Текст»).
Правильно ли я добавил:
1 шаг в файл demo.php:
Прикрепить 2
2 шаг в greate_image.php:
imagettftext($img, $font_size, 0, $x+110, $y-110, $color, $font, $text);
Запускаю почему то не работает
В исходнике после 33 строки, а это imagettftext($img, $font_size, 0, $x, $y, $color, $font, $text);
Добавьте следующую строку:
imagettftext($img, $font_size, 0, $x, $y+50, $color, $font, «Второй текст»);
Проверял на текущей демо, все работает, правда без обводки, но суть понятна думаю.
Спасибо!!! Все работает, я дальше по Вашей подсказке и шрифт текста подобрал и цвет. Успехов Вам в работе!
Дмитрий, спасибо вам огромное за полезный материал!!! Подскажите пожалуйста, все сделал как вы написали, все работает, а как и куда добавить кнопку, что бы после генерации картинки с текстом — можно было скачать сформированное фото с сайта?
Большое спасибо! Очень помогли!!! Успехов Вам.
а сохранить то ее как?
Она сохраняется на сервере