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

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

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

В наличии

Инструкция по конвертации 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.

has been added to your cart:
Оформление заказа