Как получить HTML из Lotus Notes документа не используя HTTP сервер.
Первое, мы создаем форму с одним полем «body» формата NotesRichtextItem в эту форму бы будем помещать образ документа командой doc.Rendertortitem(rtRTF), а потом преобразуем полученный документ в HTML используя класс NotesMIMEEntity.
Очень важно, перед конвертацией отключить преобразование в MIME командой session.Convertmime = false
Ниже приводится часть кода по преобразованию и записи документа Lotus Notes в файл HTML.
Если вы используете в документе вычисляемые поля, то перед рендерингом, необходимо вычислить эти поля и вписать в документ переменные с готовым результатом. Порядок такой:
- Создаем временный документ
- Переносим все поля
- Вычисляем все временные переменные и записываем результат во временный документ
- Преобразуем документ командой doc.Rendertortitem
Dim session As New NotesSession Dim doc As NotesDocument session.Convertmime = False Dim RTF As NotesDocument Set RTF = session.Currentdatabase.Createdocument() Dim rtRTF As NotesRichTextItem Set rtRTF = New NotesRichTextItem(RTF,<em>"Body"</em>) Call doc.Rendertortitem(rtRTF) Call doc.Copyallitems(RTF, false) 'копировать все пересенные Call RTF.Converttomime(<em>2</em>) 'конвертируем документв в HTML Call RTF.Computewithform(False, False) Call RTF.save(True,False) Dim mime As NotesMIMEEntity Set mime = RTF.Getmimeentity() If Not mime Is Nothing Then If mime.Contenttype=<em>"multipart"</em> Then Dim out As NotesStream Set out = session.Createstream() Dim sFile1 As String sFile1 = <em>"c:\\temp\\"</em>+RTF.Universalid+<em>".txt"</em> If Not out.Open(sFile1) Then Print <em>"Не могу создать файл"</em> Exit Sub End If Dim sFile2 As String sFile2 = <em>"c:\\temp\\"</em>+RTF.Universalid+<em>".html"</em> Dim child1 As NotesMIMEEntity Dim child2 As NotesMIMEEntity Set child1 = mime.Getfirstchildentity() While (Not child1 Is Nothing) Call out.Writetext(child1.Contentastext(), <em>0</em>) If child2 Is Nothing Then Set child2 = child1.getNextSibling() If Not child2 Is Nothing Then Set child2 = child2.getNextSibling() End If End If Set child1 = child2 Wend Call out.Close() Call DecodeFile(sFile1, sFile2) End If End If session.Convertmime = True
В коде используется вызов Call DecodeFile(sFile1, sFile2) из библиотеки. libMD5