Convert Lotus Document to HTML vs RTF


Как получить HTML из Lotus Notes документа не используя HTTP сервер.

Первое, мы создаем форму с одним полем «body» формата NotesRichtextItem в эту форму бы будем помещать образ документа командой  doc.Rendertortitem(rtRTF), а потом преобразуем полученный документ в HTML используя класс NotesMIMEEntity.

Очень важно, перед конвертацией отключить преобразование в MIME командой session.Convertmime = false

Ниже приводится часть кода по преобразованию и записи документа Lotus Notes в файл HTML.

Если вы используете в документе вычисляемые поля, то перед рендерингом, необходимо вычислить эти поля и вписать в документ переменные с готовым результатом. Порядок такой:

  1. Создаем временный документ
  2. Переносим все поля
  3. Вычисляем все временные переменные и записываем результат во временный документ
  4. Преобразуем документ командой 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