Конвертация HTML в PDF программно

09.03.22

Разработка - Инструментарий разработчика

Инструкция по конвертации HTML файлов в файлы PDF программно в 2 строчки и без заморочек.

Столкнулся с проблемой отправки электронных писем с вложением файла в формате HTML - многие почтовые клиенты блокируют картинки в HTML вложениях из-за угрозы безопасности или из-за попадания писем в спам. Есть варианты прописать DKIM и SPF для доменных почт, но мы же тут про 1С все-таки, сделаем по своему. Было принято решение конвертировать HTML в PDF в самой 1С, но типовых методов или функций в конфиге нет. В интернете есть какие-то статьи про вставку html в табличный документ с последующей отправкой - проверил, не работает, поэтому используем другой универсальный метод. Для конвертации HTML в PDF можно использовать различные конвертеры, список для ознакомления:

https://habr.com/ru/post/134505/

Наиболее подходящий и удобный в использовании для 1C - wkhtmltopdf. 

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

1. Установка: ссылка для скачивания. Устанавливается он в каталог "C:\Program Files\wkhtmltopdf\bin", файл exe можно перенести в другое место для удобства.

2. Конвертер адаптирован для работы в командной строке, синтаксис: "wkhtmltopdf http://google.com google.pdf"

Соответственно: wkhtmltopdf - путь к файлу exe, "http://google.com" - HTML страница, "google.pdf" - сохраняемый PDF файл

3. Запуск из 1С

Используем метод ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>)

Пример: 

КаталогСДокументами = "C:\Users\Public\pdf\docs\";
Имя = Строка(Новый УникальныйИдентификатор);
Приложение = "C:\Users\Public\pdf\wkhtmltopdf ";
ЗапуститьПриложение(Приложение + КаталогСДокументами + Имя + ".html " + КаталогСДокументами + Имя + ".pdf",,Истина);

 - СтрокаКоманды это и есть основной синтаксис конвертера, прописываем полный путь к исполняемому файлу:

Приложение = "C:\Users\Public\pdf\wkhtmltopdf ";

и вслед за ним указываем полный путь к файлу HTML и будущее имя сохраняемого файла PDF, все это указывается через пробел без точек, запятых и т.д.

- ДождатьсяЗавершения - параметр, отвечающий за ожидание окончательного выполнения команды. Если его не указать и после этого сразу, например попытаться вставить файл pdf во вложение электронного письма, возможно команда еще будет конвертировать файл и конвертер не успеет сохранить файл на диск, тем самым спровоцирует ошибку.

*предварительно нужно сохранить файл HTML на диск в путь "КаталогСДокументами + Имя + ".html"", чтобы к нему обратиться. Вероятно можно работать с Временными файлами, но потестив я понял, что wkntmltopdf их не видит.

Таким образом, мы получаем сохраненный pdf файл на диск и можем к нему обратиться по адресу "КаталогСДокументами + Имя + ".pdf""

Если команда каким-то образом не смогла сконвертировать файл, тогда файл не сохранится и можно выполнить проверку:

Процедура Пример()
    ////
    Если ФайлСуществует(КаталогСДокументами + Имя + ".pdf") Тогда
	    Вложение = Новый ДвоичныеДанные(КаталогСДокументами + Имя + ".pdf");		
	    Письмо.Вложения.Добавить(Вложение, "ИмяДокумента".pdf" );
		
	    УдалитьФайлы(СтрЗаменить(КаталогСДокументами, "docs\", "docs"),"*" + ".html");
	    УдалитьФайлы(СтрЗаменить(КаталогСДокументами, "docs\", "docs"),"*" + ".pdf");
    Иначе
	    ////
    КонецЕсли;

КонецПроцедуры

Функция ФайлСуществует(ПутьКФайлу)

	Файл = Новый Файл(ПутьКФайлу); 
	Возврат Файл.Существует();	

КонецФункции

Удаление файлов необязательно, но желательно.

Работает, насколько я знаю, начиная с 1С 8.2. Тестировалось на 8.3.

Вступайте в нашу телеграмм-группу Инфостарт

конвертация pdf html разработка 1С

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    14305    123    0    

88

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    83737    432    171    

364

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    286373    1611    423    

1220

Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    44444    123    54    

135

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    77447    147    41    

154

Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    28863    104    46    

107
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1409 09.03.22 14:56 Сейчас в теме
"без заморочек"
1. суровые админы могут поставить блокировку на запуск exe (ЗапуститьПриложение())
2. при установке сервиса (разворачивании после сбоя) 1С нужно помнить что нужно поставить еще приложение.

Альтернативно запустить docker сервис с преобразованием и из 1С обращаться по HTTP, из того что на github не нашел "красивого" решения", если есть желание то можно написать свой велосипед.
С одной стороны выгладит сложении чем просто накатить на win сервер, в целом получается более документированная и управляемая система.

В коде 1С желательно сделать проверку на доступность exe и логировать при отсутствии, если кратко то сделать "обертку".
За упоминание wkhtmltopdf спасибо, используется активно в подобных проектах.
maxrubtsoff; +1 – Ответить
2. Steelvan 317 30.04.22 23:46 Сейчас в теме
... запустить docker сервис с преобразованием и из 1С обращаться по HTTP ...

Божечки мои, откройте для себя https://jsreport.net/
3. Fobus2008 14.06.23 20:41 Сейчас в теме
Не понял, а что так нельзя уже сохранить HTML в pdf :

ФорматированныйДокумент.Записать("C:\MyTetst.pdf",ТипФайлаФорматированногоДокумента.PDF);

?
4. maxrubtsoff 24 14.06.23 21:20 Сейчас в теме
(3) форматированный документ насколько я знаю не работает с таблицами в html
CaSH_2004; +1 – Ответить
5. softgarant 62 30.06.23 16:59 Сейчас в теме
(4)скорее всего как раз этот способ будет работать. Главное чтобы платформа была >= 8.3.10
Прикрепленные файлы:
6. blackhorse1976 33 25.08.23 13:00 Сейчас в теме
(5) Теряется почти все форматирование, стили и прочее из html документа.... :(
Как всегда у 1С объект для работы с функционалом есть, но работает через Ж....
7. userud 15.09.23 10:27 Сейчас в теме
Добрый день, воспользовался Вашим примером, но у меня почему-то не работает.
Всё сделал по подобию, у меня нет никакой ошибки, всё отрабатывает , но нового документа в pdf формате нет.
Для отправки сообщения требуется регистрация/авторизация