|
Вставить картинку в поле HTML документа - как? | ☑ | ||
---|---|---|---|---|
0
tciban
11.11.20
✎
12:53
|
Делаю некую задачу на обычных формах. В рамках нее надо редактировать сообщение в поле HTML документа на форме, делать красиво разными шрифтами и т.п. И главное - вставлять картинки, скриншоты! С получением картинки из буфера разобрался быстро, а вот грамотно вставить в HTML никак не могу!
Как делаю: Получаю картинку, она лежит в переменной Картинка. Проверял, выводил на форму - там она, лежит. Затем ТекстКомментарий = ЭлементыФормы.НовыйКомментарий.ПолучитьТекст(); СсылкаНаКартинку = ПоместитьВоВременноеХранилище(Картинка, ЭтаФорма.КлючУникальности); ТекстКомментария = СтрЗаменить(ТекстКомментария, "src=""" + Вложение.Ключ + """", "src=""" + СсылкаНаКартинку + """"); Получаю следующее (это сторока HTML в которой про картинку после замены): <p> <br><img height="23" src="e1cib/tempstorage/186615f7-e3bc-4654-b63f-4dcd6542c75b?seanceId=698424ef-61ea-428c-9f9b-77cff42c2d03" style="border:none;" width="99"/> <br><img height="23" src="e1cib/tempstorage/3c1994ff-3d2f-4380-b8bc-47908b59bc3a?seanceId=698424ef-61ea-428c-9f9b-77cff42c2d03" style="border:none;" width="99"/></p> ЭлементыФормы.НовыйКомментарий.УстановитьТекст(ТекстКомментария); В поле форме НовыйКомментарий вместо картинки квадратик черный с крестиком. ЧЯДНТ? (Что я делаю не так?) |
|||
1
acht
11.11.20
✎
12:56
|
Второй параметр у ПоместитьВоВременноеХранилище
|
|||
2
tciban
11.11.20
✎
12:57
|
(1) Сначала было без него. Чт ос ним, что без него - эффект один и тот же
|
|||
3
tciban
11.11.20
✎
13:09
|
Я в инетах нашел только 3 способа отображения картинки в HTML - в SRC присваиваем путь к файлу с картинкой, в SRC пишем Base64Строка
типа СтрокаКартинки = "data:image/jpeg;base64,"+Base64Строка(Стр.Значение.ПолучитьДвоичныеДанные()); И в SRC пишем ссылку - адрес хранилища. Но последнее не работает! Первый способ работает, но мне не нравится, скриншоты по определению ожидаются немаленькие, значит будет генерится много букав, ссылка на файл - ну это совсем не удобно. Потому хочу способ через адрес хранилища, оно вроде как правильнее. Зачем подробно пишу? Потому что такой вопрос возник - смотрел конфу ITIL prof Там у них картинки вставляются вовсе некоим 4-м способом (правда там все на УФ). Там у них делается для HTML строка следующего вида: <img height="41" src="img_c9bca569_2d00_40eb_b579_59b2d8377f7f" style="border:none;" width="40"/> При том сначала в тэге написано img_1 и т.д., а img_c9bca569_2d00_40eb_b579_59b2d8377f7f генерится как "img_" + СтрЗаменить(Новый УникальныйИдентификатор(), "-", "_"); Казалось бы - такого способа нет, но картинка в HTML выводиться! КАК? |
|||
4
ДенисЧ
11.11.20
✎
13:11
|
||||
5
acht
11.11.20
✎
13:15
|
(2) > Чт ос ним, что без него
Прочитай внимательно СП, пожалуйста. |
|||
6
tciban
11.11.20
✎
13:21
|
(4) Там все не по русски. И в HTML я не умею, не нужно было никогда раньше. Скажи простыми словам?
(5) Второй параметр - что с ним не так? EBL формы я сгенерил раенее если что. Процедура ПриОткрытии() ЭтаФорма.КлючУникальности = Новый УникальныйИдентификатор; |
|||
7
tciban
11.11.20
✎
13:24
|
EBL - УИД
|
|||
8
tciban
11.11.20
✎
14:43
|
Коллеги! Неужели никто ничего не может сказать? Ну наверняка ж все просто как всегда, только я туплю сильно видимо.
|
|||
9
Dzenn
гуру
11.11.20
✎
15:32
|
Просто вставляй картинку в хтмл как строку двоичных данных Base64 и всё. Самый простой и всегда работающий вариант.
Что-то типа такого: <img src="data:image/jpg;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0j vb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAA Re8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0Cc guWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7"/> |
|||
10
tciban
11.11.20
✎
15:46
|
(9) Это у меня получается, это я умею уже дня 3 как :) Но хочется понять почему не работает другой способ!
|
|||
11
Dzenn
гуру
11.11.20
✎
16:08
|
(10) потому что хранилище значений 1С не является "родным" источником данных для хтмл, и поэтому не нужно мучать этих животных, пытаясь их скрестить )
|
|||
12
tciban
12.11.20
✎
07:33
|
(11) Это конечно верная мысль, но в интернете полно примеров именно с таким способом, т.е. оно работает. Но только не у меня. Вот и хочется понять почему!
|
|||
13
ДенисЧ
12.11.20
✎
07:36
|
(12) Есть подозрение, что оно работало на старом движке (эксплорер). А на новом (вебкит) уже не работает
|
|||
14
tciban
12.11.20
✎
07:50
|
(13) Да, возможно все дело в этом. Короче всю ночь не спал, ворочался, думал и решил ну его нафик, буду вставлять двоичными данными. И в таком виде и буду возвращать в ИТИЛ. Все равно картинку в отдельном виде нигде не надо, важно ее в тексте видеть. Попробуем так.
Но все равно непонятно как они в ИТИЛе картинки в HTML поле отображают... |
|||
15
tciban
12.11.20
✎
08:00
|
Братцы! Может кто ссылку даст где про аналогичную задачу - вставка картинок в HTML поле в 1С? Может попадалось кому на глаза?
|
|||
16
Dzenn
гуру
12.11.20
✎
09:51
|
(15) ДвоичныеДанные = ХранилищеЗначений.Получить();
ДанныеСтрокой = Base64Строка(ДвоичныеДанные); Ответ = "data:image/jpg;base64," + ДанныеСтрокой; |
|||
17
tciban
12.11.20
✎
09:58
|
(16) Я так и делаю. Мне интересно - через ссылку, адрес хранилища как картинку вывести. А так я давно умею и практикую не хуже Дзюбы ;)
|
|||
18
Dzenn
гуру
12.11.20
✎
10:07
|
(17) в твоём случае из (1) я думаю, что ссылка на хранилище должна выглядеть не src="e1cib/tempstorage/3c1994ff-3d2f-4380-b8bc-47908b59bc3a?seanceId=698424ef-61ea-428c-9f9b-77cff42c2d03", а src="e1cib/tempstorage/3c1994ff-3d2f-4380-b8bc-47908b59bc3a".
|
|||
19
yzimin
12.11.20
✎
10:25
|
Была подобная задача для сторонней системы отдавать картинки и PDF печатные формы основной базы. Делал через http-сервис, затем в итоге потребовалось и в основной базе выводить картинки в html-документе, в итоге так и использовали этот http-сервис "сами для себя"
src="ПутьДоБазы/api/hs/Навание_HTTP_сервиса/" + Формат([Номенклатура.Артикул], "ЧГ=0") Сам http-сервис Ответ = Новый HTTPСервисОтвет(200); Ответ.Заголовки.Вставить("Content-type", "image/jpeg"); ... Ответ.УстановитьТелоИзДвоичныхДанных(Выборка.ДвоичныеДанныеФайла.Получить()); |
|||
20
tciban
12.11.20
✎
11:00
|
(18) Спасибо за идею, сейчас попробую!
|
|||
21
tciban
12.11.20
✎
11:01
|
(19) У меня условие - через web сервис. Никаких HTTP :(
|
|||
22
ДенисЧ
12.11.20
✎
11:03
|
(21) Мзвините, а веб-сервисы работают через ftp? А может, через gopher:// ?
|
|||
23
tciban
12.11.20
✎
11:16
|
(22) Эх, не силен я в этом пока :(
|
|||
24
Kassern
12.11.20
✎
11:24
|
(21) А в чем проблема передачи ДД через веб сервис?
Первая же ссылка на это дело... http://1centerprise8.blogspot.com/2015/10/veb-servis-i-fajly.html |
|||
25
tciban
12.11.20
✎
11:44
|
(24) Не-не! у меня нет (пока) проблем с передачей двоичных данных. У меня проблемы с редактированием HTML поля в обычных формах.
|
|||
26
Kassern
12.11.20
✎
13:56
|
(25) Я вообще не понимаю зачем плодить одинаковые темы, просто загуглить "полеhtmlдокумента добавить картинку" и на первой же странице есть ссылка на статью на мисте. где все расписано...
Для ленивых вот ссылка Как вставить изображение в поле HTML документа а вот решение ДД=Новый ДвоичныеДанные(ПутьДоКартинки); СтрокаНТМL=" |<!DOCTYPE html> |<html> |<center> |"; СтрокаНТМL=СтрокаНТМL+" |<img src=""data:image/jpeg;base64, |"; СтрокаНТМL=СтрокаНТМL+Base64Строка(ДД); СтрокаНТМL=СтрокаНТМL+" |"" style=""max-width:100%; height:auto""; align-items:center; alt="""" /> |</center> |</html> |"; ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(СтрокаНТМL); |
|||
27
Dzenn
гуру
13.11.20
✎
09:58
|
Кстати, вот сейчас нашёл, во вполне себе типовом коде: https://prnt.sc/vif6ff
Что подтверждает то, что 1С для вывода картинок тоже использует base64 |
|||
28
tciban
13.11.20
✎
10:01
|
(26) А ты думаешь я не гуглил? Я, думаешь, сразу сюда писать кинулся? Нет, сначала 2 дня искал, пробовал... Ну не получилось, не нашел, бывает. И да, именно из этой ссылки я взял преобразование в строку base64.
Но вопрос то был не об этом! |
|||
29
tciban
13.11.20
✎
10:02
|
(28) Видимо и нет иного способа...
|
|||
30
tciban
13.11.20
✎
10:17
|
Что интересное заметил - если взять объект ФорматированныйДокумент (ФД), установить в него текст HTML с внедренными туда через base64 картинками, то если потом получить с AL обратно HTML текст он вернет его уже без base64 картинок заменив их на <img src=img_1> и т.д. а картинки вернет в массиве структур где ключ img_1 (2, 3 и т.д.), а значение - картинка в хранилище.
|
|||
31
Kassern
13.11.20
✎
11:23
|
(30) Только что протестил на УФ, все норм отрабатывает с временным хранилищем. На ОФ такое не проканало, так что юзай base64
Вот рабочий код для УФ АдресВХ = ПоместитьВоВременноеХранилище(Новый Картинка(ДД)); АдресКартинки = "<!DOCTYPE html><html><head></head><body><p><img src=" + АдресВХ + "></img></p></body></html>"; |
|||
32
Дык ё
13.11.20
✎
12:17
|
(31) для УФ так делать тоже не надо. помещение в хранилище, в отличие от base64, это + серверный вызов.
|
|||
33
Kassern
13.11.20
✎
12:28
|
(29) Танцуй, вот тебе решение для ОФ без base64. А строило только немного погуглить возможности html и добавить немножко фантазии...
АдресВХ = ПоместитьВоВременноеХранилище(Новый Картинка(ПутьДоКартинки)); АдресКартинки = "<!DOCTYPE html><html><head><base href=""e1c://server/localhost/test/""></base></head><body><p><img src=" + АдресВХ + "></img></p></body></html>"; ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(АдресКартинки) |
|||
34
Kassern
13.11.20
✎
12:29
|
(33) всего то надо было объяснить html докумнту где у тебя база лежит, чтобы подцеплять картинки. В УФ html документ изначально знает путь до базы
|
|||
35
Kassern
13.11.20
✎
12:30
|
(28) плохо гуглил видимо(
|
|||
36
Kassern
13.11.20
✎
12:40
|
(32) Насчет серверного вызова я в курсе, но мы же не знаем всю подноготную ТС, ему base64 чем-то не угодил, хотел через временное хранилище сделать, вот я и написал ему вариант как это сделать
|
|||
37
Kassern
13.11.20
✎
12:50
|
(33) Можно вообще без временного хранилища обойтись, если и оно не устраивает, а просто указать каталог с картинками.
АдресКартинки = "<!DOCTYPE html><html><head><base href=""D:/picture/""></base></head><body><p><img src=""test_image.jpg""></img></p></body></html>"; ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(АдресКартинки); |
|||
38
Сергиус
13.11.20
✎
13:02
|
(0)<div><img src="file:\\\<ПутьКФайлу>"</div>
|
|||
39
tciban
13.11.20
✎
13:14
|
(33) Ага! Вот теперь понятно! Пригодится :)
(35) Ну бывает, я старался но вот... (36) Ну серверный или нет - пофиг, я на ОФ вынужден делать. (37) Не, куаталог с картинками - это наверное самый худший вариант А в целом - спасибо огромное!!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |