Тема: Вставить картинку (image) в XML-документ.
Иногда нужна вставка изображения внутри текста в XML-документе.
Будет сгенерирована такая структура:
<object data="data:image/jpeg;base64,/9j/4AAQSkZJRgAB.... u5yp6c5ooGf/Z"></object>
Функция получает текст, в котором есть ссылки на картинки
Лотус код:
Function Replace_img(mytext As String) As String 'ищем картинки в тексте и конвертим их в base64 12.06.2020 14.00 актуализировано с CIT v 1.0
On Error Goto ErrH
Const sub_dir="doctmp.files"
Const c_files_ext="jpeg; jpg; png; tif" 'для проверки на типы картинок которые могут быть в тексте
' Const c_files_ext="jpeg; jpg; tif" 'для проверки на типы картинок которые могут быть в тексте
Dim inStream As NotesStream, patchName As String, fileName As String, session As New NotesSession, c_files_MIME List As String
Set inStream=session.Createstream()
patchName=datapatch+sub_dir
If Dir$ (patchName,16 )="" Then ' проверка на наличие папки "doctmp.files", т.к. если в шаблоне в тексте нет картинок, то эта папка не создается
Replace_img=mytext
Exit Function
' Mkdir datapatch
' Mkdir datapatch+"\OUT"
End If
patchName=patchName+"\"
fileName = Dir$(patchName, 0)
If fileName$<>"" Then
arr=Split(c_files_ext,"; ")
Gosub const_zapoln
End If
Do While fileName$ <> ""
Print "картинка: "+fileName$
If Not Isnull(Arraygetindex(arr,Lcase(Strrightback(fileName$, ".")))) Then 'проверяем на допустимый тип картинки
%REM
дана подстрока
<img width=236 height=420 id="Рисунок 1" src="doctmp.files/image001.jpg">
ее нужно заменить на соответствующий base64 файл
%END REM
'нужно найти src="doctmp.files/image001.jpg"
If Instr(mytext, {src="}+sub_dir+{/}+fileName$+{">})>0 Then 'если в html файле есть картинка которая есть в директории - то преобразовываем картинку в base64
L_str$=Strleft(mytext, {src="}+sub_dir+{/}+fileName$+{">}) 'вырезали все что до src="doctmp.files/image001.jpg">
L_str$=Strleftback( L_str$ , {<img}) 'вырезали все что до <img
R_str$=Strright(mytext, {src="}+sub_dir+{/}+fileName$+{">}) ''вырезали все что после src="doctmp.files/image001.jpg"
Call inStream.Open(patchName & fileName$, "binary") ' в поток inStream файл
Dim b64 As New CBase64()
plainText$ = b64.encode (inStream)
plainText$= Replace(plainText$,Chr(10),"") ' удаляем спецсимволы во вложениях
plainText$= Replace(plainText$,Chr(9),"")
plainText$= Replace(plainText$,Chr(13),"")
Call inStream.Close
Kill patchName & fileName$
'склеиваем результат
mytext = L_str$ + {<object }+Replace(c_files_MIME(Lcase(Strrightback(fileName$, "."))),"href","data")
mytext = mytext + plainText$ +{"></object>}
mytext = mytext +R_str$+ Chr(13)
End If
End If
fileName$ = Dir$()
Loop
Replace_img=mytext
Exit Function
const_zapoln:
' https://ru.wikipedia.org/wiki/Список_MIME-типов - подсказка
c_files_MIME("jpeg") = {href="data:image/jpeg;base64,}
c_files_MIME("jpg") = {href="data:image/jpeg;base64,}
c_files_MIME("png") = {href="data:image/png;base64,}
c_files_MIME("tif") = {href="data:image/tif;base64,}
Return
ErrH:
Print "Ошибка ф-ции Replace_img " & Error(Err) & " в строке " & Erl
End Function