Envision a database containing documents with Acrobat PDF attachments. By using II2LN together with Ghostscript, you can extract the PDF attachment and make an image of the first page automatically. The agent below will do that. Please note that the agent look for the PDF attachments in the Body field. For each PDF attachment found, the agent will create two new rich text fields, rtDisplay_n and rtAttachment_n, where "n" represent the number of the attachment. If you want to display the image, please add the necessary rtDisplay_n fields to your Notes form.
'Process PDF Attachments with II2LN: 
Option Public
Option Declare
' Functions from II2LN
Declare Function ImportImage Lib "VCII2LN.DLL" (_
Byval pstrNotesServer As String, _
Byval pstrNotesDatabase As String, _
Byval pstrNotesUNID As String, _
Byval pstrNotesField As String, _
Byval pstrFilename As String, _
Byval pstrImportOptions As String) As Long
' General Windows functions
Declare Function GetTempPath Lib "kernel32.dll" Alias "GetTempPathA" (Byval nBufferLength As Long, Byval lpBuffer As String) As Long
Sub Initialize
 Dim session As New NotesSession
 Dim db As NotesDatabase
 Dim col As NotesDocumentCollection
 Dim doc As NotesDocument
 Dim docNext As NotesDocument
 Dim strUNID As String
 Dim lRc As Long
 Dim strTempPath As String
 Dim strFilePath As String
 Dim body As NotesRichTextItem
 Dim listAttachmentsInDoc List As String
 Dim strImportOptions As String
 Dim listImportOptions List As String
 Dim strIO As String
 Dim strIOParam As String
 Dim strTmp As String 
 Dim iCounter As Integer
 ' Get the temporary path for the user. This is the directory where the temp files will be stored
 strTempPath = GetTemporaryPath()
 On Error Resume Next
 ' Prepare to loop through all the selected documents
 Set db = session.CurrentDatabase
 Set col = db.UnprocessedDocuments
 Set doc = col.GetFirstDocument
 ' For each selected document ....
While Not doc Is Nothing
  ' Remember the UNID of the currently selected document
  strUNID = doc.UniversalID
  ' Get the next document now - because when we use II2LN, we detach the doc variable!
  Set docNext = col.GetNextDocument(doc)
  ' Find and extract the attachment. If found, then process the current document with II2LN - but
  ' only if the document has attachments at all
  If doc.HasEmbedded Then 
   ' Ensure list of filenames is empty 
   Erase listAttachmentsInDoc
   ' Get the handle to the richtext item "Body"
   Set body = doc.GetFirstItem("Body")
   ' Loop through all the attachments in the document
   iCounter = 0
   Forall attachment In body.EmbeddedObjects
    If attachment.Type = EMBED_ATTACHMENT Then
     ' Construct temporary file path for attachment
     strFilePath = strTempPath & attachment.Source
     ' Extract attachment
     Call attachment.ExtractFile(strFilePath)
     ' If our list of filenames for this document doesn't contain the filename, then add it
     If Not Iselement(listAttachmentsInDoc(strFilePath)) Then
      listAttachmentsInDoc(Cstr(iCounter)) =
strFilePath
      iCounter = iCounter + 1
     End If
     Call attachment.Remove
    End If
   End Forall
   ' Save the document - this will essentially save the document *without* the attachment
   Call doc.Save(True,False)
   ' Ok, we don't need to reference the doc-variable anymore before II2LN processing,
   ' so we get rid of it
   Set doc = Nothing
   ' Loop through all attachments
   iCounter = 1
   Forall strFileName In listAttachmentsInDoc
    ' Clear list of II2LN options
    Erase listImportOptions    
    ' Ok, now we have a list of attachment filenames, and they are all extracted to temp directory
    ' Time to work with II2LN!
    ' Using the list structure below makes it easy to add new import options!
    listImportOptions("SetResizeMethod") = "7"
    listImportOptions("SetLogLevel") = "5"
'    listImportOptions("Sharpen") = "50"
    ' The SetGhostscriptProcessor is not necessary if you find GSWIN32C.EXE in one of your PATH directories
    listImportOptions("SetGhostscriptProcessor") = "E:\Programs\gswin32c.exe"    ' The exact path and filename to GS
    listImportOptions("SetGhostscriptParameters") = "-r300 -dTextAlphaBits=4 -dGraphicsAlphaBits=4" ' Enhance PDF conversion!!
    listImportOptions("Resize") = "1024,0"
    listImportOptions("AttachOriginalFile") = "rtAttachment_" & Cstr(iCounter)
    ' Straighten out the listImportOptions list to a string, which I can use with II2LN
    Forall impopt In listImportOptions
     strIO = Listtag(impopt)
     strIOParam = impopt
     strTmp = strIO & ":" & strIOParam
     If strImportOptions = "" Then
      strImportOptions = strTmp
     Else
      strImportOptions = strImportOptions & ";" & strTmp
     End If
    End Forall
    ' Process the image with II2LN
    lRc = ImportImage(_
    db.Server,_  ' The server
    db.FilePath,_ ' The database
    strUNID, _ ' The UNID
    "rtDisplay_" & Cstr(iCounter),_ ' The field name
    strFileName,_ ' The image to import
    strImportOptions) ' The import options
    ' If OK, delete the temp file
    If lRc = 0 Then
     Kill strFileName
    End If    
    iCounter = iCounter + 1
   End Forall
  End If ' end if doc.HasEmbedded
  ' Advance to the next selected document in the view
  Set doc = docNext
 Wend
 Exit Sub
End Sub
Function GetTemporaryPath() As String
 Dim strTempPath As String*255
 Dim lStringLength As Long
 strTempPath = String(255, 0)  ' Initialize string
 lStringLength = GetTempPath(255, strTempPath)
 GetTemporaryPath  = Left$(strTempPath, lStringLength)
End Function