Табличный документ с рисунками при переводе в HTML "теряет" рисунки

1. ipoloskov 163 21.03.17 16:15 Сейчас в теме
Пример кода:
&НаСервере
Функция ПолучитьТабличныйДокумент()
	
	Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
	ТабличныйДокумент = Новый ТабличныйДокумент;
	Область = Макет.ПолучитьОбласть("Шапка");
	ТабличныйДокумент.Вывести(Область);
	
	возврат ТабличныйДокумент;
	
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ТабличныйДокумент = ПолучитьТабличныйДокумент();
	
	ФайлВФорматеHTML = ПолучитьИмяВременногоФайла();
	ТабличныйДокумент.Записать(ФайлВФорматеHTML, ТипФайлаТабличногоДокумента.HTML);
	ТекстПисьма = Новый ТекстовыйДокумент;
	ТекстПисьма.Прочитать(ФайлВФорматеHTML);
		
	ХТМЛПоле = ТекстПисьма.ПолучитьТекст();
	
КонецПроцедуры
Показать

В переменной ХТМЛПоле на месте рисунка образуется следующий кусок текста:
<TD ROWSPAN=3 ALIGN=LEFT VALIGN=TOP STYLE="padding-left: 0"><IMG SRC = "v8_41CF_a_files\image000.png" ALT = "" width = 33 height = 33 style = "margin-left:31pt;margin-top:7pt;"></TD>
То есть, подставляется адрес в хранилище.
На экране при этом отображается перечеркнутый квадратик - рисунка по такому адресу программа не видит. Причем неважно, где происходит сохранение табличного документа во временный файл, на клиенте или на сервере.

При отправке такого HTML по почте в теле письма, 1С УПП выдает ошибку "Ошибка при вызове метода контекста (ИнтернетПочта.Послать): Каталог не обнаружен \v8_41CF_a_files\image000.png"

Платформа 8.3.8.2167
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
2. starik-2005 3039 21.03.17 16:28 Сейчас в теме
Путь относительный, а нужно его дополнить путем к каталогу временных файлов, например, в котором картинки лежат. Второй вариант - прочитать картинку в двоичные данные и заюючить его (base64встроку) и прописать в SRC.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3039 21.03.17 16:28 Сейчас в теме
Путь относительный, а нужно его дополнить путем к каталогу временных файлов, например, в котором картинки лежат. Второй вариант - прочитать картинку в двоичные данные и заюючить его (base64встроку) и прописать в SRC.
3. ipoloskov 163 21.03.17 18:08 Сейчас в теме
(2) спасибо, получилось через base64встроку

Выложу код, может кому пригодится. Преобразование табличного документа 1С в HTML с сохранением картинок
	ТабличныйДокумент = ПолучитьТабличныйДокумент();
	
	ФайлВФорматеHTML = ПолучитьИмяВременногоФайла();
	ТабличныйДокумент.Записать(ФайлВФорматеHTML, ТипФайлаТабличногоДокумента.HTML5);
	ТекстПисьма = Новый ТекстовыйДокумент;
	ТекстПисьма.Прочитать(ФайлВФорматеHTML);
		
	ХТМЛПоле = ТекстПисьма.ПолучитьТекст();
	
	НачальнаяПозицияПоиска = 1;
	
	Для Каждого РисунокТабличногоДокумента Из ТабличныйДокумент.Рисунки Цикл
	
		Картинка = РисунокТабличногоДокумента.Картинка;
		Если Картинка.Формат() <> ФорматКартинки.PNG Тогда
			Картинка = Картинка.Преобразовать(ФорматКартинки.PNG);
		КонецЕсли;
		
		ДвоичныеДанныеКартинки = Картинка.ПолучитьДвоичныеДанные();
		ДвоичныеДанныеКартинкиКакСтрока = Base64Строка(ДвоичныеДанныеКартинки);
	
		Тег_IMG = "<IMG ";
		ПозицияОткрытияТега = СтрНайти(ХТМЛПоле, Тег_IMG,, НачальнаяПозицияПоиска);
		Если ПозицияОткрытияТега<>0 Тогда
			
			НачальнаяПозицияПоиска = ПозицияОткрытияТега+1;
			
			ПозицияКавычки_НачалоАдреса = СтрНайти(ХТМЛПоле, """", , ПозицияОткрытияТега);
			Если ПозицияКавычки_НачалоАдреса <> 0 Тогда
				ПозицияКавычки_ОкончаниеАдреса = СтрНайти(ХТМЛПоле, """", , ПозицияКавычки_НачалоАдреса+1);
				Если ПозицияКавычки_ОкончаниеАдреса<>0 Тогда
					
					НовыйАдрес = "data:image/png;base64,"+ДвоичныеДанныеКартинкиКакСтрока;
						
					ХТМЛПоле = Лев(ХТМЛПоле, ПозицияКавычки_НачалоАдреса)
						+ НовыйАдрес
						+ Сред(ХТМЛПоле, ПозицияКавычки_ОкончаниеАдреса);
						
				КонецЕсли;

			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
Показать


ТипФайлаТабличногоДокумента.HTML5 - обязательно, если в табличном документе несколько картинок (например, печать и подпись)
4. ipoloskov 163 22.03.17 12:35 Сейчас в теме
(2) Через base64встроку работает, но письма кривые получаются, так как почтовый клиент встроенные картинки в виде бинарных данных блокирует. Настроить права, наверное, возможно, но у клиентов никто этим заниматься не будет.
Поэтому интересует вариант с "дополнить путем к каталогу временных файлов". Как получить этот путь? Вручную выгрузить картинку из табличного документа во временный файл и запихнуть его вместо IMG SRC = "v8_41CF_a_files\image000.png"?
5. starik-2005 3039 22.03.17 20:12 Сейчас в теме
(4)
Как получить этот путь?

По всей видимости это путь к каталогу временных файлов, в который сохраняются картинки. Но если речь идет о письмах, то, полагаю, нужно данные картинки размещать на каком-нибудь HTTP-сервере, который должен быть доступен всем, кто получает письмо.

Также письмо можно запаковать в mht - была какая-то статья на эту тему где-то: http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=552182
ipoloskov; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот