ОбработатьHTMLДляФорматированногоДокумента (БСП)

Автор: 1С
ОбщийМодуль.ШаблоныСообщенийСлужебный
БСП

Обработать html для форматированного документа. Обрабатывает текст HTML для помещения в форматированный документ.

// Обрабатывает текст HTML для помещения в форматированный документ.
//
Процедура ОбработатьHTMLДляФорматированногоДокумента(ПараметрыШаблона, СформированноеСообщение, ПреобразовыватьHTMLДляФорматированногоДокумента, СписокФайлов = Неопределено) Экспорт

	Если ПустаяСтрока(СформированноеСообщение.Текст) Тогда
		Возврат;
	КонецЕсли;
	
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
		МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами");
		
		Если СписокФайлов = Неопределено Тогда
			СписокФайлов = Новый Массив;
			МодульРаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(ПараметрыШаблона.Шаблон, СписокФайлов);
		КонецЕсли;
		
		ДокументHTML = ПолучитьОбъектДокументHTMLИзТекстаHTML(СформированноеСообщение.Текст);
		Для каждого Картинка Из ДокументHTML.Картинки Цикл
			
			АтрибутИсточникКартинки = Картинка.Атрибуты.ПолучитьИменованныйЭлемент("src");
			
			ДополнительныеПараметры = Новый Структура;
			ДополнительныеПараметры.Вставить("ИдентификаторФормы", ПараметрыШаблона.УникальныйИдентификатор);
			ДополнительныеПараметры.Вставить("ВызыватьИсключение", Ложь);
			
			ИзображениеОтсутствуетВПрисоединенныхФайлах = Истина;
			
			Для Каждого ПрисоединенныйФайл Из СписокФайлов Цикл
				Если СтрЧислоВхождений(АтрибутИсточникКартинки.Значение, ПрисоединенныйФайл.ИДФайлаЭлектронногоПисьма) > 0 Тогда
					ДанныеФайла = МодульРаботаСФайлами.ДанныеФайла(ПрисоединенныйФайл.Ссылка, ДополнительныеПараметры);
					ОбработатьКартинкуВТекстеHTMLДляФорматированногоДокумента(Картинка, ДанныеФайла, СформированноеСообщение, 
					АтрибутИсточникКартинки, ПрисоединенныйФайл.Наименование, ПрисоединенныйФайл.ИДФайлаЭлектронногоПисьма);
					ИзображениеОтсутствуетВПрисоединенныхФайлах = Ложь;
					Прервать;
				ИначеЕсли СтрНачинаетсяС(АтрибутИсточникКартинки.Значение, "cid:" + ПрисоединенныйФайл.Наименование) Тогда
					НайденнаяСтрока = СформированноеСообщение.Вложения.Найти(ПрисоединенныйФайл.Наименование, "Представление");
					Если НайденнаяСтрока <> Неопределено Тогда
						СформированноеСообщение.Вложения.Удалить(НайденнаяСтрока);
					КонецЕсли;
					
					ДанныеФайла = МодульРаботаСФайлами.ДанныеФайла(ПрисоединенныйФайл.Ссылка, ДополнительныеПараметры);
					ОбработатьКартинкуВТекстеHTMLДляФорматированногоДокумента(Картинка, ДанныеФайла, СформированноеСообщение,
						АтрибутИсточникКартинки, ПрисоединенныйФайл.Наименование, ПрисоединенныйФайл.Наименование);
					ИзображениеОтсутствуетВПрисоединенныхФайлах = Ложь;
					Прервать;
				КонецЕсли;
			КонецЦикла;
			Если ИзображениеОтсутствуетВПрисоединенныхФайлах Тогда
				ИмяКартинки = Сред(АтрибутИсточникКартинки.Значение, 5);
				НайденнаяСтрока = СформированноеСообщение.Вложения.Найти(ИмяКартинки, "Представление");
				Если НайденнаяСтрока <> Неопределено Тогда
					ДвоичныеДанные = ПолучитьИзВременногоХранилища(НайденнаяСтрока.АдресВоВременномХранилище);
					АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ПараметрыШаблона.УникальныйИдентификатор);
					
					НайденнаяСтрока.Идентификатор = ИмяКартинки;
					НайденнаяСтрока.АдресВоВременномХранилище = АдресВоВременномХранилище;
					НовыйАтрибутКартинки = АтрибутИсточникКартинки.КлонироватьУзел(Ложь);
					НовыйАтрибутКартинки.ТекстовоеСодержимое = ИмяКартинки;
					Картинка.Атрибуты.УстановитьИменованныйЭлемент(НовыйАтрибутКартинки);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		
		Если ПреобразовыватьHTMLДляФорматированногоДокумента Тогда
			ТекстHTML = ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML);
			СформированноеСообщение.Текст = ТекстHTML;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОбработатьТекстHTMLДляФорматированногоДокумента (БСП)

ФорматированныйЗаголовок (БСП)

ФорматированнаяСтрокаИзHTML (БСП)

Пример раскраски текста форматированной строки

ТекстФорматированногоЗаголовка (БСП)

ОбработатьВыборВПолеРассмотретьПосле (БСП)

ФорматированнаяСтрока (БСП)

НавигационнаяСсылкаОбработкиРезервногоКопирования (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз