lotus-dominolotusscript

Create Inline Image in a RichText Item from an Agent


I'm trying to write an Agent which is run via an xmlhttprequest and accepts a UNID and a Base64 encoded image as paramater.

What i'm up for is that the agent decodes the base64 string and writes it as an inline Image into a RichText Field

I tried writing the base64 encoded string to a Stream, then creating a MimeEntity with a Child Entity and set the content from the stream, Then get the MimeEntity Item and Append it to the RichTextItem

.
.
.
Call stream.Writetext(data)
.
Set body = doc.CreateMIMEEntity("RT")   


Set header = body.CreateHeader("Content-Type") 
Call header.SetHeaderVal("multipart/mixed")
.
Set child = body.CreateChildEntity() 
Call child.Setcontentfrombytes(stream, "image/jpeg", 1727) 
Call child.Decodecontent()
.
Call RT.AppendRTItem(MimeEntityItem)

But I end up with a 6400byte image/jpeg file And now i don't get any further

Does anybody has any clues on how to get something like this working ? Thanks in Advance =)

Edit:

Ok, i figured it just creates a file with the valid base64 string but it doesn't get decoded


Ok now i got at least this far:

  Option Public
  Option Declare

  Sub Initialize

      Dim session As NotesSession
      Dim doc As NotesDocument
      Dim query_string As String
      Dim params As Variant
      Dim i As Integer
      Dim db As NotesDatabase
      Set session = New NotesSession
      Set doc = session.DocumentContext
      query_string = doc.QUERY_STRING(0)

  On Error GoTo errorrt
      params = Split (query_string,"&")

      Print("<html><head></head><body>")

      Print params(1);
      Print("<br>")
      Print ({<img src="data:image/png;base64,} & params(2) & {"></img>})
      Set db = session.Currentdatabase
      Set doc = db.Getdocumentbyunid(params(1))
      If doc Is Nothing Then
          Print ("Ne")
      End If
      Print (doc.Getitemvalue("tatkun")(0))
      Print ("</body></html>")

      Call AttachSignature(doc,params(2),"signature")

      Exit Sub
  errorrt:
      Print (Error & " " & erl)
      Exit Sub
  End Sub


  Function AttachSignature(doc As NotesDocument, data As Variant, filename As String) As Boolean

  AttachSignature = False

  Dim session As New NotesSession
  Dim db As NotesDatabase
  Dim body As NotesMIMEEntity
  Dim header As NotesMIMEHeader
  Dim child As NotesMIMEEntity
  Dim stream As NotesStream
  Dim fileType As String
  Dim rt1 As NotesRichTextItem
  Dim rt2 As NotesRichTextItem

  On Error GoTo ErrorRoutine

  Set db = doc.Parentdatabase
  Set stream = session.CreateStream

  Call stream.Writetext(data) 'Write the Data to the Stream


  If doc.Getitemvalue("SignatureAttached")(0) = "1" Then
      Exit Function
  End If

  Set body = doc.CreateMIMEEntity("TempRT")     

  Set header = body.CreateHeader("Content-Type") 
  Call header.SetHeaderVal("multipart/mixed")

  Call body.CreateHeader("Content-Disposition"). _
  SetheaderValAndParams({attachment; filename="} &filename & {"})


  Set child = body.CreateChildEntity()

  fileType = "image/jpeg"

      Call child.SetcontentfromText(stream, fileType, 1727) 
      Call stream.Close() 
      Call body.Decodecontent()

  Call doc.save(False, False)

  Set rt1 = doc.GetFirstItem("signature")
  Set rt2 = doc.GetFirstItem("TempRT")

  Call rt1.AppendRTItem( rt2 )
  Call rt2.Remove()

  doc.SignatureAttached = "1"

  Call doc.save(False, False)

  AttachSignature = True

  Exit Function

  ErrorRoutine:
   If Not rt2 Is Nothing Then
      Call rt2.Remove()
   End If 
   Print (Error & " " & Erl)
   Exit Function
  End Function

Which adds a valid image To the RichText item =)

But i don't get how i could make it an inline image. And the filename isn't correct too.

Again Thanx for any help =)


Solution

  • I believe you want to be using multipart/related instead of multipart/mixed, and assigning a Content-ID: header to the MIMEEntity that stores the iamge, and then using to reference the content ID in your image.