Конвертация 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С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

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

15500 руб.

02.09.2020    178901    992    403    

949

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

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

8400 руб.

20.08.2024    20392    136    75    

137

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

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

22200 руб.

06.10.2023    19065    51    19    

83

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

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

15000 руб.

10.11.2023    13013    54    33    

72

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    29249    101    48    

146

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

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

20000 руб.

07.10.2021    18729    7    32    

43

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1852    2    0    

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

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

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