Конвертация 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 разработка

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    127660    688    389    

740

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    8536    25    6    

47

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    4827    12    2    

38

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 руб.

14.01.2013    179071    1086    0    

863

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15153    3    12    

38

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    100044    239    97    

298

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28472    4    10    

16

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18578    6    8    

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

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

В коде 1С желательно сделать проверку на доступность exe и логировать при отсутствии, если кратко то сделать "обертку".
За упоминание wkhtmltopdf спасибо, используется активно в подобных проектах.
maximus_2712; +1 Ответить
2. Steelvan 302 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. maximus_2712 15 14.06.23 21:20 Сейчас в теме
(3) форматированный документ насколько я знаю не работает с таблицами в html
5. softgarant 62 30.06.23 16:59 Сейчас в теме
(4)скорее всего как раз этот способ будет работать. Главное чтобы платформа была >= 8.3.10
Прикрепленные файлы:
6. blackhorse1976 29 25.08.23 13:00 Сейчас в теме
(5) Теряется почти все форматирование, стили и прочее из html документа.... :(
Как всегда у 1С объект для работы с функционалом есть, но работает через Ж....
7. userud 15.09.23 10:27 Сейчас в теме
Добрый день, воспользовался Вашим примером, но у меня почему-то не работает.
Всё сделал по подобию, у меня нет никакой ошибки, всё отрабатывает , но нового документа в pdf формате нет.
Оставьте свое сообщение