Подставить в документ текст умеют все инструменты. Подставить картинку — почти никто: Excel не хранит изображения в ячейках так, чтобы их можно было забрать, а Word тянет их только через поля с недружелюбным синтаксисом.
Между тем задач ровно три, и они массовые: фотография на удостоверение, подпись руководителя в договор, печать организации на справку. Разберём, как это устроено технически — от связывания картинки со строкой таблицы до случая, когда бланк вообще не документ Word, а изображение из типографии.
Текст в ячейке — это значение. Программа взяла строку, подставила, готово. Картинка в ячейке — это либо объект, «плавающий» над таблицей и не привязанный к конкретной строке, либо вообще отдельный файл на диске.
Поэтому все рабочие подходы устроены одинаково: в таблице хранится не картинка, а имя файла. Сами файлы лежат в папке, и связь между строкой и изображением — это текстовое значение в ячейке.
Отсюда сразу три следствия, которые определяют всю дальнейшую работу:
В штатном слиянии Word для этого есть поле INCLUDEPICTURE, и работает оно тяжело: фигурные скобки набираются только сочетанием клавиш, обратные слэши в путях приходится удваивать, а после слияния во всех документах нередко оказывается одна и та же картинка из первой записи. Дальше речь пойдёт о более прямом способе.
Схема состоит из трёх частей и настраивается один раз.
1. Колонка в таблице. Заводится колонка со специальным именем — оно должно начинаться с IMG:. Например, IMG:Фото, IMG:Подпись, IMG:Печать. В ячейках пишутся имена файлов: ivanov.jpg, petrova.png.
2. Файлы картинок. Кладутся в ту же папку, где лежат шаблоны. Можно разложить по подпапкам — тогда в ячейке указывается путь относительно папки шаблонов.
3. Метка в шаблоне. В том месте документа, где должно появиться изображение, ставится {{IMG:Фото}} — ровно с тем же именем, что у колонки.
При обработке программа берёт из ячейки имя файла, находит его в папке и вставляет картинку в документ на место метки.
Пара практических мелочей, которые экономят время при заполнении таблицы:
ivanov, программа сама переберёт распространённые форматы и найдёт ivanov.jpg или ivanov.png. Удобно, когда фотографии приходят в разных форматах от разных людей.Это ключевой момент, потому что фотографии обычно приходят разного размера: одна с телефона на 4000 пикселей по длинной стороне, другая — скан 600×800.
Размер указывается внутри метки, в миллиметрах:
| Метка | Что делает |
|---|---|
{{IMG:Фото-w:30}} | ширина 30 мм, высота подберётся сама |
{{IMG:Фото-h:40}} | высота 40 мм, ширина подберётся сама |
{{IMG:Фото-w:30-h:40}} | жёстко 30×40 мм |
{{IMG:Фото}} | исходный размер картинки |
Полные варианты записи тоже работают: -width: и -height: вместо коротких.
Указывайте только одну сторону. Тогда пропорции сохраняются и лица на фотографиях не растягиваются. Жёсткие 30×40 имеет смысл ставить только если вы уверены, что все исходники уже приведены к этому соотношению.
Для фотографии на удостоверение стандарт — 30×40 мм, поэтому обычно пишут -w:30 и заранее кадрируют исходники в пропорции 3:4. Для подписи в договоре хватает -w:40, для печати — -w:35.
Отдельно: если метка стоит внутри ячейки таблицы, программа дополнительно вписывает картинку в ширину этой ячейки, даже если вы задали больше. Это защита от разъезжающейся вёрстки.
Две проблемы, с которыми сталкивается любой, кто собирал фотографии от людей.
Перевёрнутые снимки. Телефон пишет ориентацию не в саму картинку, а в служебные данные EXIF. Многие программы это поле игнорируют, и портрет ложится на бок. Здесь поворот применяется автоматически: фотография встанет так, как её видел человек на экране телефона.
Вес. Снимок с современного телефона — это 3–8 МБ. Двести таких фотографий в документах превратятся в неподъёмные файлы. При вставке изображение пересохраняется с оптимизацией: JPEG — с качеством 90, PNG — со сжатием без потерь. Визуально разницы нет, размер итоговых документов заметно меньше.
Но если фотографии приходят прямо с камеры, лучше уменьшить их заранее — до 800–1200 пикселей по длинной стороне. Для печати 30×40 мм этого с запасом хватает, а обработка пойдёт быстрее.
Здесь есть одна ошибка, которую совершают почти все, и она видна сразу.
Подпись сканируют на белом листе и сохраняют как JPEG. Формат JPEG прозрачность не поддерживает — вокруг подписи остаётся белый прямоугольник. Вставленная в документ, такая подпись закрывает собой линию для подписи, часть фамилии и всё, что оказалось под ней.
Правильно так: отсканировать подпись, убрать фон в любом графическом редакторе и сохранить в PNG с прозрачным фоном. Тогда подпись ляжет поверх линии, как настоящая.
То же самое с печатью. Синяя печать на белом квадрате поверх текста выглядит грубой подделкой; печать с прозрачным фоном — естественно.
Практический порядок для подписи:
Про юридическую сторону стоит сказать прямо: вставленное изображение подписи — это не электронная подпись и не заменяет собственноручную. Для внутренних документов и черновиков это удобно, для документов, имеющих юридические последствия, вопрос решается отдельно и не средствами генератора.
Отдельный класс задач, который через Word не решается вообще. Типографский диплом с рамкой, сертификат с гильошем, бейдж, наградной лист — всё это существует как изображение. Вписать в него данные средствами Word невозможно: нет способа работать с картинкой как с холстом.
Решение устроено иначе. Рядом с файлом-макетом кладётся файл разметки с тем же именем и расширением .json: Диплом.png и Диплом.json. В разметке описано, что и в какой точке печатать.
Выглядит она так:
{
"ФИО": {
"x": 600, "y": 420,
"font": "Times New Roman", "style": "bold",
"size": 48, "color": "#1a1a1a",
"align": "center", "max_width": 900
},
"Программа": {
"x": 600, "y": 520,
"font": "Times New Roman",
"size": 28, "color": "#333333",
"align": "center", "max_width": 1000
},
"Номер": {
"x": 1180, "y": 980,
"font": "Arial", "size": 18, "color": "#666666",
"align": "right"
}
}Ключ верхнего уровня — это имя колонки в таблице. Всё остальное — параметры печати:
| Параметр | Смысл | По умолчанию |
|---|---|---|
x, y | координаты в пикселях от левого верхнего угла макета | 0, 0 |
font | название семейства шрифта | arial |
style | regular, bold, italic | regular |
size | размер шрифта в пикселях | 24 |
color | цвет в формате #RRGGBB | #000000 |
align | left, center, right — относительно точки x | left |
max_width | ширина области в пикселях; включает перенос длинных строк | нет |
font_path | путь к конкретному файлу шрифта | нет |
pseudo_bold | искусственная жирность, если у шрифта нет начертания bold | false |
Здесь есть неочевидная деталь, на которой легко потерять полчаса. Когда задан max_width, точка x считается центром области, а не её левым краем: область раскладывается симметрично относительно этой точки. Без max_width значение x — это привычная точка привязки, а align определяет, в какую сторону от неё растёт текст.
Практический порядок разметки: откройте макет в любом редакторе, наведите курсор на нужное место и посмотрите координаты в пикселях. Для строк по центру бланка укажите x равным половине ширины макета, align: center и max_width чуть меньше ширины рамки — тогда длинное ФИО перенесётся, а не уползёт за край.
Про шрифты: указывается семейство, файл ищется среди установленных в системе. Если такого шрифта нет, подставится ближайший из надёжных кириллических — Arial, Calibri, Times New Roman, Tahoma. Чтобы гарантировать вид, можно положить файл шрифта рядом с макетом и указать его в font_path.
Хорошая новость: ошибки с картинками не молчаливые. Вместо изображения в документ попадает пометка, по которой сразу понятно, что произошло.
[IMG ERROR: FILE NOT FOUND] — файла с таким именем нет в папке шаблонов. Проверьте: опечатку в ячейке, лишний пробел в конце значения, регистр расширения, лежит ли файл в подпапке, которая не указана в значении.
[IMG TOO LARGE] — файл больше 20 МБ. Обычно это скан в TIFF без сжатия. Пересохраните в JPEG.
Картинка вставилась, но огромная. В метке не задан размер. Добавьте -w: с нужной шириной.
Фотография растянута. Заданы обе стороны сразу, а исходник другого соотношения. Уберите одну.
Подпись закрывает текст белым прямоугольником. Файл в JPEG. Пересохраните в PNG без фона.
И отдельно про безопасность: в ячейке нельзя указать абсолютный путь вроде C:\Users\... или адрес в интернете — такие значения отклоняются. Картинки берутся только из папки шаблонов и её подпапок. Это ограничение намеренное: файл с данными от подрядчика не должен уметь дотянуться до произвольного места на диске.
Прогоняйте не всю таблицу, а три строки — и подберите их специально:
Откройте результат и посмотрите на три вещи: не осталось ли пометок [IMG…], не съехала ли вёрстка от длинных значений, и как выглядит подпись на фоне линии.
Для макетов-картинок удобно первым делом сделать пробную разметку с яркими цветами — например, красным по координатам, которые вы считаете верными. Один прогон сразу покажет, куда на самом деле попадает текст, и после этого координаты правятся за минуту.
Картинка в документ подставляется через связку «колонка с именем файла — папка с файлами — метка в шаблоне». Размер задаётся в самой метке в миллиметрах, и лучше указывать одну сторону, чтобы не искажать пропорции. Подписи и печати — только PNG с прозрачным фоном. Если бланк существует как изображение, к нему пишется файл разметки с координатами, шрифтами и выравниванием.
Всё описанное работает в SmartDocGen: и вставка в документы Word, и печать по макету-картинке. Как размечается сам шаблон Word и почему метки иногда «ломаются», разобрано в отдельной статье о подготовке шаблонов; устройство связки таблицы и шаблона — здесь.
Бесплатного демо-режима у программы нет: установщик скачивается свободно, но для запуска нужен код активации. Проверить на своих фотографиях и макетах дешевле всего по тарифу на месяц — 399 ₽.


