Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Smash am 27.03.04 - 10:17:54

Titel: Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Smash am 27.03.04 - 10:17:54
Hallo @all,
ich benötige Hilfe oder eine Idee, wie ich den Inhalt von .pdf oder .doc-dateien in Notes importieren kann, so dass der Inhalt im neuen Notes-Dok direkt sichtbar wird. Also ich möchte keine Attachments oder Objects im Notes-Dok haben.
Hat irgendeiner Erfahrungen damit??
Danke in Voraus
Smash
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Semeaphoros am 27.03.04 - 10:37:52
Dot Doc kannst Du doch über File - Import importieren? Wo ist das Problem?

PDF ist nicht so einfach, weil Format für einen Import nicht vorgesehen ist.
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Smash am 01.04.04 - 09:32:02
Nun, vielleicht hätte ich erwähnen sollen, dass dieser Import im Zuge eines Background-Agenten geschehen soll, und da konnte ich bisher nur den File als EmbeddedObject einfügen. Ich möchte aber den Inhalt des Files direkt im RTF-Feld anzeigen lassen.
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Semeaphoros am 01.04.04 - 09:36:21
Wie wäre es damit:


Call notesUIDocument.Import( [ filter$ , filename$ ] )
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Smash am 03.04.04 - 09:03:06
Ja, habe ich auch schon dran gedacht, aber da ich mich Backend bewege und nicht im Frontend wird das wohl nicht gehen. Werde das aber nochmal austesten.
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: koehlerbv am 03.04.04 - 11:12:56
Das funktioniert garantiert NICHT im Backend. Und PDF kann m.E. überhaupt nicht importiert werden, auch nicht im Frontend.

Bernhard
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: animate am 03.04.04 - 13:06:50
wenn ich mich nicht irre, dann kannst du dir was aus der OfficeLibrary abschauen.

da sind z.b. Worddokumente auch als eingebette Objekte in NotesDokumenten gespeichert, werden aber beim Öffnen eines Notes Doks "aktiviert". also der Inhalt wird angezeigt

aber ich bin mir nicht wirklich sicher, ob das stimmt.
Titel: Alternative.....
Beitrag von: TMC am 03.04.04 - 15:03:31
Eine Alternative wäre es, dass Du das PDF direkt im Notes-Client anzeigst (ohne eigenes Fenster).

(http://217.160.137.156/user/bp/tmc/_threaduploads/pdf_01.gif)


Ich hab mal eine Beispiel-DB attached.....

Matthias


** Edit **
Beispiel-DB gelöscht, hier ist die aktuelle DB:
http://www.atnotes.de/index.php?board=9;action=display;threadid=15076
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: koehlerbv am 03.04.04 - 15:08:34
Interessantes Phänomen: Wenn ich das Dokument in Deiner DB im Lesenmodus öffne, ist es leer. Öffne ich es im Bearbeiten-Modus, sehe ich ein PDF-Attachment darin.

Was läuft da schief ?

Bernhard
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 15:15:30
Hängt vielleicht der Acrobat (Reader) noch irgendwie im Taskmanager drin?

Versuche bitte mal folgendes:
- Notes-Client schließen
- Adobe (Acrobat) abschiessen im Taskmanager
- Notes-Client starten
- Nochmal versuchen (Dok doppelklicken)

Ich selbst habe das noch nicht produktiv eingesetzt, wusste nur dass es da was gibt :-)

Die PDF-Datei im Anhang wird btw im Windows-Temp-Verzeichnis gespeichert.......
Die PDF sollte im Lese-Modus angezeigt werden, im Bearbeiten-Modus nicht (sondern das Attachment).

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 15:21:53
Bernhard, ich konnte gerade denselben Fehler feststellen (Fenster bleibt leer).

Wenn ich dann 3 Msgboxes hinzufüge im Postopen, dann geht es.

Code
Sub Postopen(Source As Notesuidocument)
   Dim doc As NotesDocument   
   Dim adobe As Variant
   Dim rtItem As Variant
   Dim strWinTemp As String
   Dim strStartPDF As String
   
   If Source.EditMode = True Then Exit Sub 'Exit wenn Dok in Bearbeitung
   
   Set doc= Source.Document
   Set adobe = Source.GetObject("Acrobat Control for ActiveX")
   Set rtItem = doc.GetFirstItem("PDF")
   
   strWinTemp = WinTemp 'see function.....
   Msgbox "strWinTemp"
   
   Forall obj In rtItem.EmbeddedObjects
      If (obj.Type=Embed_Attachment) Then
         Call obj.ExtractFile(strWinTemp & "\" & obj.Source)
         Msgbox "Extrahiert"         
         adobe.LoadFile(strWinTemp & "\" & obj.Name)
         Msgbox "Geladen"
      End If
   End Forall
   
End Sub

Wohl ein Timing-Problem? Vielleicht sollte man einen sleep einbauen..... ??

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: koehlerbv am 03.04.04 - 15:30:03
AFAICS: Sleep bringt nix. Die Massage-Kiste
Msgbox "Extrahiert"
ist der Punkt - diese alleine reicht, um das Ding zum Laufen zu bringen.
Mystisch, aber schon mal ein Ansatz ;-)

Bernhard
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: animate am 03.04.04 - 16:15:30
nur ne Idee, ohne die Syntax zu kennen:

If obj.ExtractFile then
...
End if
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 16:23:41
Hmm, Problem ist ja, dass das File immer extrahiert wird. Das klappt also.

Nur eben ohne Msgbox geht es nicht immer.
Habe es gerade auch unter R6.5 getestet, da verhält es sich genau so.

Kann man denn eine geöffnete Msgbox per Befehl schliessen? Dies wäre dann zumindest ein Workaround.....

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Axel_Janssen am 03.04.04 - 16:29:38
was ist hiermit?
(http://www.atnotes.de/attachments/activeX.GIF)
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 16:34:02
Axel, genau habe ich in meiner Beispiel-DB verwendet  :)

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Axel_Janssen am 03.04.04 - 16:44:56
:outsch:  ;D
vielleicht ist das Internet Explorer plug-in irgendwie stabiler.
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: koehlerbv am 03.04.04 - 16:45:11
Ich kriege einen Klaps - das ActiveX-Control will wirklich, dass vorher irgendwas im FrontEnd passiert !
Mit folgendem Code im PostOpen geht es sich - dazu muss man sich noch eine Maske "(DummyForm") basteln, und die Adobe-Maske sollte die Vorgabemaske sein.

Code
Sub Postopen(Source As Notesuidocument)
   Dim ws As New NotesUIWorkspace   
   Dim session As New NotesSession
   Dim dbCurrent As NotesDatabase
   Dim docTemp As NotesDocument
   Dim uidocTemp As NotesUIDocument
   
   Dim doc As NotesDocument   
   Dim adobe As Variant
   Dim rtItem As NotesRichTextItem
   Dim strWinTemp As String
   Dim strStartPDF As String
   
   On Error Goto ErrorRoutine
   
   If Source.EditMode = True Then Exit Sub 'Exit wenn Dok in Bearbeitung
   
   Set doc= Source.Document
   Set adobe = Source.GetObject("Acrobat Control for ActiveX")
   Set rtItem = doc.GetFirstItem ("PDF")
   
   strWinTemp = WinTemp 'see function.....
   'Msgbox "strWinTemp"
   
   Forall obj In rtItem.EmbeddedObjects
      If (obj.Type=Embed_Attachment) Then
         Call obj.ExtractFile(strWinTemp & "\" & obj.Source)
         'Sleep (5)
         'Msgbox "Extrahiert" 
         Set dbCurrent = session.CurrentDatabase
         Set docTemp = dbCurrent.CreateDocument
         docTemp.Form = "(DummyForm)"
         Set uidocTemp = ws.EditDocument (False, docTemp, True)
         Call uidocTemp.Close
         
         adobe.LoadFile(strWinTemp & "\" & obj.Name)
         'Msgbox "Geladen"
      End If
   End Forall
   
   Exit Sub
   
ErrorRoutine:
   Msgbox "An error occured: " & Error$ & " (in line " & Cstr (Erl) & ")"
   Exit Sub
   
End Sub

Mal sehen, ob dafür einer eine logische Begründung findet ...

By the way: Hilft das eigentlich bei der ursprünglichen Frage dieses Threads ? Unschön ist auch die Bedienung, um aus dem PDF wieder back to Notes zu kommen - die meisten Anwender werden da wohl aus Versehen Notes schliessen anstatt Adobe Acrobat Reader (mit Babelfish: "Lehmziegel Turner Leser" ;-) zu schliessen. Aber die Idee an sich hat was.

Ciao,
Bernhard
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: koehlerbv am 03.04.04 - 16:59:42
Nachtrag:
An sich wäre es ja nett, wenn man die sowieso vorhandene Form "Adobe" für NotesUIWorkspace.EditDocument gleich verwenden könnte. Aber hier gilt:
"Wer ander'n eine Gräbe grubt,
sich selber in die Nase pupt !"
Damit wird ja gleich wieder das PostOpen der zu öffnenden Maske ausgeführt ... Würde Notes da nicht nach einer Weile selber streiken, wäre dies: "'In Ewigkeit - Amen !', sprach die Endlosschleife ..."

Wegen letzterem: Jeeeeeeeeens !

Ciao,
Bernhard
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 17:13:34
An sich wäre es ja nett, wenn man die sowieso vorhandene Form "Adobe" für NotesUIWorkspace.EditDocument gleich verwenden könnte. Aber hier gilt:
"Wer ander'n eine Gräbe grubt,
sich selber in die Nase pupt !"
Damit wird ja gleich wieder das PostOpen der zu öffnenden Maske ausgeführt ...

Geht schon:
Code
Sub Postopen(Source As Notesuidocument)
   On Error Goto errHandler
   
   Dim ws As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim dbCurrent As NotesDatabase
   Dim docTemp As NotesDocument
   Dim uidocTemp As NotesUIDocument
   Dim doc As NotesDocument
   Dim adobe As Variant
   Dim rti As NotesRichTextItem
   Dim strWinTemp As String
   Dim strStartPDF As String
   Dim oFirst As NotesEmbeddedObject
   
   If Source.EditMode = True Then Exit Sub 'Exit wenn Dok in Bearbeitung
   
   
   Set doc= Source.Document
   
   If source.FieldGetText("TempFlag")  = "1"   Then Exit Sub
   
   Set adobe = Source.GetObject("Acrobat Control for ActiveX")
   Set rti = doc.GetFirstItem("PDF")
   
   Set oFirst = rti.EmbeddedObjects(0)
   
   If oFirst Is Nothing Then
      Msgbox "No embedded object in document"
      Exit Sub
   End If
   
   strWinTemp = WinTemp 'see function.....
   
   Call oFirst.ExtractFile(strWinTemp & "\" & oFirst.Source)
   
   Set dbCurrent = session.CurrentDatabase
   Set docTemp = dbCurrent.CreateDocument
   docTemp.Form = "Adobe"
   docTemp.TempFlag = "1"
   Set uidocTemp = ws.EditDocument (False, docTemp, True)
   Call uidocTemp.Close
   adobe.LoadFile(strWinTemp & "\" & oFirst.Name)
   
exitScript:
   Exit Sub
   
errHandler:
   Msgbox "An error occured." & Chr(10)  & Chr(10) _
   & "Error text: " & Error$ & Chr(10) _
   & "Error number: " & Err & Chr(10) _
   & "Line: " & Erl & Chr(10) _
   ,64,"Error"
   Resume exitScript
   
End Sub

Bitte nicht erschrecken, ist mein Baustellen-Code zum testen :-)

Ich habe in der Maske ein Hidden-Field "TempFlag".

So klappt es jetzt lt. den ersten Tests :)

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: koehlerbv am 03.04.04 - 17:25:04
Aaaah - ja ! Klar, das geht sich auch, das erspart die zweite Maske. Guuuute Idee !
Eins plus eins ist eben häufig doch mehr als zwei ? (= zwei zusammengespannte Hirne fabrizieren mehr als zwei alleinige).

Well done, Matthias.

Servus,
Bernhard
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 17:34:38
Ich sag danke, Bernhard, war ja eine super Zusammenarbeit  :D

Werde dann noch die aktualisierte DB in 'Tipps&Tricks' stellen......

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Axel_Janssen am 03.04.04 - 17:37:39
um aus dem PDF wieder back to Notes zu kommen

... ich verfolge Mathias seine Bemühungen nicht life, deshalb ist das vielleicht auch "schon da"  ;D

Um besser in notes zu bleiben, kann man die Maske mit dem ActiveX in einem Frame eines Framesets laden.
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 17:54:55
um aus dem PDF wieder back to Notes zu kommen

... ich verfolge Mathias seine Bemühungen nicht life, deshalb ist das vielleicht auch "schon da"  ;D

Um besser in notes zu bleiben, kann man die Maske mit dem ActiveX in einem Frame eines Framesets laden.
Ist nicht wirklich schon da :-) Ist aber eine gute Idee Axel!

Matthias

Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 20:22:00
Habe jetzt auf ein Frameset etc. verzichtet, ich denke es reicht ein Close-Button für den Anwender.

Hier der Tipps&Tricks-Beitrag:
http://www.atnotes.de/index.php?board=9;action=display;threadid=15076

Ansonsten kann ja der Entwickler das bei Bedarf schnell entsprechend erweitern......

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: koehlerbv am 03.04.04 - 20:50:22
Mir ist in Deinem PostOpen noch was aufgefallen, was wenig Sinn zu machen scheint:

Du startest Deinen Code mit
On Error Goto errHandler

Einige Zeilen später kommt
On Error 184 Goto NoEmbeddedObject

Diese Anweisung überschreibt die erste, die damit obsolet wird. Besser wäre, erst in der Fehlerroutine ggf. die aufgetretene Fehlernummer zu analysieren und dann fallweise weiter zu verfahren.

HTH,
Bernhard
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 21:03:17
Da hast Du natürlich vollkommen Recht Bernhard, danke für den Hinweis.

Habe ich gerade korrigiert.

errHandler:
   Select Case Err
   Case 184 'NoEmbeddedObject....
      Msgbox "There is no file attached.... ", 64, "Info"
      Call Source.close
      Resume exitScript
   Case Else
      Msgbox "An error occured." & Chr(10)  & Chr(10) _
      & "Error text: " & Error$ & Chr(10) _
      & "Error number: " & Err & Chr(10) _
      & "Line: " & Erl & Chr(10) _
      ,64,"Error"
      Resume exitScript      
   End Select

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 03.04.04 - 21:15:54
Jetzt ist nur noch eines nicht berücksichtigt:

Was ist, wenn der User den PDF-Reader nicht installiert hat?

Ich habe keine Ahnung wie da der Fehlercode aussehen könnte....

Aber eine Msgbox à la "You are a loser, ever heard about Adobe Acrobat?" wäre imho noch hilfreich.... :)

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: koehlerbv am 04.04.04 - 00:04:09
8495 ist die Fehlernummer  ;D

Ich habe hier @home doch tatsächlich noch einen PC gefunden (in der Küche - und der steht kurz vor dem Austausch, hier kommt der neue Server hin ! Wer kann das schon sagen -"Mein Küchen-PC ist der Domino-Server !" ?  ;D), auf dem Der Lehmziegel-Turner-Leser nicht installiert war.

HTH,

Bernhard
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: TMC am 04.04.04 - 21:24:57
cool, vielen Dank Bernhard 8)

Habe das Errorhandling entsprechend aktualisiert (und mich für einen etwas milderen Text entschieden :-)):
Code
   Case  8495 'Adobe Acrobat Reader is not installed
      Msgbox "Please install Adobe Reader for viewing this file, see http://www.adobe.com .... ", 64, "Info"
      Call Source.close
      Resume exitScript

Matthias
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: meichhorner am 13.04.04 - 15:36:44
Hy,

noch ne kleine Anmerkung zu dem ganzen Thema, ich habe mich schon vor längerer Zeit sehr intensiv mit dem Adobe Active X beschäftigt und muss euch warnen falls ihr noch ältere Rechner einsetzt, denn es dauert seine Zeit bis der Prozess des Acrobat Reader sich wieder beendet.

Bei der Performance von aktuellen Modellen kein Problem, aber wie gesagt bei alten Kisten schon. ;)

Cu
Martin
Titel: Re:Inhalte von .pdf und .doc in rtf-feld anzeigen
Beitrag von: Smash am 17.04.04 - 11:12:05
Wow,
da macht man mal ein wenig Urlaub und schon explodiert der Thread.
Vielen Dank für die Hilfe, das hat mir sehr geholfen.
Gruß
Smash :D