Autor Thema: Import Bilddateien  (Gelesen 2047 mal)

Jürgen Schomann

  • Gast
Import Bilddateien
« am: 25.03.15 - 16:08:19 »
Ich habe folgenden Beispielcode zum Importieren von Bilddateien in Rich-Text-Felder:

   Dim session As New NotesSession
   Dim dbThis As NotesDatabase
   Dim docMIME As NotesDocument
   Dim docUserProfile As NotesDocument
   Dim doc As NotesDocument
   Dim rtitemGraphic As NotesRichTextItem
   Dim rtitem As NotesRichTextItem
   Dim mimeEntity As NotesMIMEEntity
   Dim stream As NotesStream
   Dim dxlExporter As NotesDXLExporter   
   Dim dxlImporter As NotesDXLImporter   
   Dim sFile$
   
   sFile = "D:\Bild.gif"
   Set dbThis = session.CurrentDatabase
   Set docMIME = New NotesDocument(dbThis)

   session.ConvertMIME = False
   Set mimeEntity = docMIME.CreateMIMEEntity
   Set stream = session.CreateStream
   If Not stream.Open(sFile, "Binary") Then Exit Sub
   Call mimeEntity.SetContentFromBytes(stream, "image/" & StrRightBack(sFile, "."), ENC_IDENTITY_BINARY)
   Call stream.Close
   Call docMIME.CloseMimeEntities(True)      
   session.ConvertMIME = True

   If docMIME.HasItem("Body") Then
      Set rtitemGraphic = docMIME.GetFirstItem("Body")
      
      '##### Start: Workaround um zusätzlichen Zeilenumbruch zu entfernen
      Set docUserProfile = dbThis.GetProfileDocument("UserProfile", session.UserName)
      If docUserProfile.HasItem("Body") Then Call docUserProfile.RemoveItem("Body")
      Call rtitemGraphic.CopyItemToDocument(docUserProfile, "Body")      
      Set dxlExporter = session.CreateDXLExporter
      dxlExporter.ConvertNotesBitmapsToGIF = True
      dxlExporter.RestrictToItemNames = "Body"
      Set dxlImporter = session.CreateDXLImporter(dxlExporter.Export(docUserProfile), dbThis)
      dxlImporter.DocumentImportOption = DXLIMPORTOPTION_UPDATE_ELSE_IGNORE
      Call dxlImporter.Process      
      Set rtitemGraphic = docUserProfile.GetFirstItem("Body")
      '##### Ende: Workaround um zusätzlichen Zeilenumbruch zu entfernen
      
      Set doc = dbThis.UnprocessedDocuments.GetFirstDocument
      Set rtitem = doc.GetFirstItem("Body")
      Call rtitem.AppendRTItem(rtitemGraphic)
      Call doc.Save(True, False)
   End If

Wenn ich den oben gekennzeichneteten Abschnit 'Workaround ..' nicht ausführe, wird immer ein Zeilenumbruch vor dem Bild im Rich-Text-Feld erzeugt.
Wenn man das o. g. Dokument docMIME abspeichern würde, wäre noch kein Zeilenumbruch enthalten. Erst durch ansprechen des Feldes nach dem Umschalten von ConvertMIME auf 'True' erhält das Rich-Text-Feld diesen Umbruch.
Dies sieht man auch wenn man den DXL-Export ausgibt. Ist ggf. etwas an o. g. Algorithmus verkehrt?
O. g. Code funktioniert entsprechend auch für BMP- und JPEG-Dateien nur für TIFF-Dateien funktioniert es nicht. TIFF-Dateien werden nicht als Bild sondern als Anhang erzeugt.
Aber manuell kann man in ein Dokument ein TIFF-Datei als Bild einfügen. Gibt es dafür eine Lösung.

Offline Micha2000

  • Frischling
  • *
  • Beiträge: 2
  • Geschlecht: Männlich
    • IT-Infos
Re: Import Bilddateien
« Antwort #1 am: 08.04.15 - 14:48:50 »
Hallo Jürgen,

evtl. bringt es was wenn man die Bilddatei zuvor als Base64 codiert.
(http://www.base64-image.de/step-1.php?m=1)

und dann mit diesem Code:
http://atnotes.de/index.php?topic=52040.0

importiert. Der Code hat bei mir funktioniert, wobei ich festgestellt hab da er im Mime-Feld nur HTML-Formatierung erlaubt (also auch was Umbrüche angeht).
Gruß Micha

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz