Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: DaHias am 19.11.08 - 10:21:23

Titel: E-Mail als pdf ablegen
Beitrag von: DaHias am 19.11.08 - 10:21:23
Hi zusammen,

Hab inzwischen schon einige Funktionen im Web gefunden, die mir z.B. Attachments von Mails auf der Festplatte speichern.

Jetzt bin ich allerdings noch auf der Suche nach einer Funktion, mit der ich nur Mails in pdf konvertiert auf der Festplatte speichern kann. Diese Funktion würde ich gerne in unsere Mail-Schablone integrieren, da das Geschrei danach sehr groß ist.

Das Exportieren der Mail bzw. des Inhalts ist ansich kein Problem, ich krieg das schon so hin, dass ich am Ende ein Word-Dokument habe. Aber wie krieg ich denn dann den Dreh hin, dass er automatisch das Dokument in pdf konvertiert?

Mit einem pdf-Drucker? Ja ok, aber den müsste ich ja vorher erstmal setzen? Der Benutzer soll möglichst wenig davon mitkriegen.

Danke für alle Tipps, evtl. Links usw.!

Mathias
Titel: Re: E-Mail als pdf ablegen
Beitrag von: mde am 19.11.08 - 10:32:00
Hi,

ich habe so etwas selber noch nicht programmiert aber wenn ihr den Adobe writer auf den Clients installiert habt kann man darüber aus Notes PDF erstellen.
Schau mal hier nach:
http://searchdomino.techtarget.com/tip/1,289483,sid4_gci1176495,00.html (http://searchdomino.techtarget.com/tip/1,289483,sid4_gci1176495,00.html)

Gruß Michael
Titel: Re: E-Mail als pdf ablegen
Beitrag von: DaHias am 19.11.08 - 13:40:59
Hi Michael,

Danke für deinen Link! Da müsst ich nur recht viel selber machen (hab bisher noch nix mit Java usw. gemacht).
Habe irgendwie (jaja Schande über mein Haupt ;)) gehofft, dass so eine Funktion in einer fertigen Datenbank schon vorhanden ist.

Vielleicht hat ja noch jemand etwas für mich?
Titel: Re: E-Mail als pdf ablegen
Beitrag von: y20frank am 20.11.08 - 08:50:07
Versuch's doch mal mit dem frei nutzbaren PDFCreator (Download aus dem Web: http://www.pdfforge.org/products/pdfcreator/download).
Das Ding kann man von Notes aus über die COM Schnittstelle ansteuern. Mach ich derzeit auch für einige Datenbanken (Beispielscript hätte ich da)... Die Notes-Dokumente und deren Office-Anhänge werden je zu einem PDF zusammengeführt und dem Notes-Dokument wieder angehängt. So werden derzeit ca. 800 Dokumente / Stunde in PDF umgewandelt.
Als kommerzielle Lösung gibt es den ePDF Server von Groupware - von dem Ding kann man halten was man will. Die Idee ist genial, die Performance allerdings ziemlich schlecht (da das Ding PDFs sequentiell konvertiert dauert es ewig, bis man 100 Dokumente als PDF zurück geliefert bekommt). Ach so, man braucht dafür natürlich auch einen eigenen Server... ;-p
LG
Frank

Titel: Re: E-Mail als pdf ablegen
Beitrag von: klaussal am 20.11.08 - 08:57:06
Zitat
(Beispielscript hätte ich da)...

Vielleicht wäre es eine nette Geste, das Script in der Rubrik "Downloads" abzulegen ....

(oder soll ich mal eben nach Dortmund kommen  (15 km)  ;D  ) ?
Titel: Re: E-Mail als pdf ablegen
Beitrag von: DaHias am 20.11.08 - 09:10:04
@Frank: Ja so ein Beispielscript wär schon was feines :)
Titel: Re: E-Mail als pdf ablegen
Beitrag von: y20frank am 20.11.08 - 09:16:25
Script-Beispiel:

Code

Sub Initialize
	' -------------------------------------------------------------------
	' --- Deklarationen / Settings
	' -------------------------------------------------------------------	
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc, docPG As NotesDocument
	
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Set db = session.CurrentDatabase
	
	Dim dc As NotesDocumentCollection
	Set dc = db.UnprocessedDocuments
	
	ok = Messagebox("Wollen Sie die " & dc.Count & " ausgewählten Dokumente mit dem PDFCreator konvertieren?", 4+32, "PDFCreator | Konverter")
	If ok = 7 Then Exit Sub
	
	' -------------------------------------------------------------------
	' --- Globale Konfiguration einlesen
	' -------------------------------------------------------------------	
	Set docPG = db.GetProfileDocument("($Config)")
	
	cfg_pcspfad = docPG.cfg_PCSPfad(0)
	If Right(cfg_pcspfad, 1) <> "\" Then cfg_pcspfad = cfg_pcspfad & "\"
	
	cfg_pcsfile = docPG.cfg_PCSFile(0)
	cfg_pcsattfile = docPG.cfg_PCSAttFile(0)
	
	cfg_pcsformat = Lcase(docPG.cfg_PCSFormat(0))
	cfg_pcsfile = cfg_pcsfile & "." & cfg_pcsformat
	
	' PDFCreator "simuliert" Verwendung des PDF Servers (Felder setzen)
	cfg_pcs_epdfsim = docPG.cfg_PCS_ePDFSim(0)
	If cfg_pcs_epdfsim <> "" Then
		cfg_resultcodegw = docPG.ResultCodeGW(0)
		If cfg_resultcodegw = "" Then cfg_resultcodegw = "131"
		cfg_pcsfile = docPG.cfg_ePDF_OutputFileName(0)
	End If
	
	fpath = cfg_pcspfad	
	ffile = cfg_pcsfile
	
	' -------------------------------------------------------------------	
	
	' init PDFCreator
	Set oPDFC  = CreateObject("PDFCreator.clsPDFCreator")
	
	oPDFC.cStart("/NoProcessingAtStartup")
	oPDFC.cOption("UseAutosave") = 1
	oPDFC.cOption("UseAutosaveDirectory") = 1
	oPDFC.cOption("AutosaveFormat") = 0   	' 0=PDF, 1=PNG, 2=JPG, 3=BMP, 4=PCX, 5=TIFF, 6=PS, 7= EPS, 8=ASCII
	
	
	DefaultPrinter = oPDFC.cDefaultprinter
	oPDFC.cDefaultprinter = "PDFCreator"
	oPDFC.cClearCache
	
	oPDFC.cOption("AutosaveDirectory") = fpath
	oPDFC.cOption("AutosaveFilename") = ffile
	
	Set doc = dc.GetFirstDocument
	unid = doc.UniversalID
	
	c = 0
	Do Until doc Is Nothing
		c = c + 1
		
		oPDFC.cPrinterStop = True
		
		' document was already converted
		If doc.ePDF_flg(0) > "" Then 
			Print "Document was alreday converted!"
			Goto weiter
		End If
		
		' print NotesDocument at first ...
		i = 1
		Set uidoc = ws.EditDocument (False, doc)
		Call uidoc.Print(1)
		Call uidoc.Close(True) ' If True, the document is immediately closed. If False, closing the document may be delayed
		
		Set rtitem = doc.GetFirstItem( "Body" )
		
		If Not doc.HasEmbedded Then
			Goto no_object
		End If
		
		If Not rtitem Is Nothing And rtitem.Type = RICHTEXT Then
			Forall o In rtitem.EmbeddedObjects
				i = i + 1
				
				Print fpath & o.Name
				
				Call o.ExtractFile( fpath & o.Name )
				
				' check if attachment is printable
				isPrintable = oPDFC.cIsPrintable(fpath & o.Name)
				If isPrintable = False Then
					Print "Converting: " & unid & " " & o.Name &  " An error is occured: File is not printable! ", 0+16, ""
					Goto weiter	' Weiter mit nächstem Dokument
				End If
				
				' and now print all attachments
				Print "Printing -> " & fpath & o.Name
				
				oPDFC.cPrintfile(fpath & o.Name)
				
			End Forall
			
		End If
		
no_object:
		
		' count print jobs in queue
		Do Until oPDFC.cCountOfPrintjobs = i
			Doevents
		Loop
		
		' combine all print jobs to one document
		oPDFC.cCombineAll
		oPDFC.cPrinterStop = False
		
		' let PDFCreator print all jobs from queue
		Do Until oPDFC.cCountOfPrintjobs = 0
			Doevents
		Loop
		
		' release
		Sleep(.1)
		oPDFC.cDefaultprinter = DefaultPrinter
		oPDFC.cClearcache
		Sleep(.1)
		
		' attach created PDF file
		If cfg_pcsattfile <> "" Or cfg_pcs_epdfsim <> "" Then
			Set rtitem = doc.GetFirstItem("Body")
			
			If rtitem Is Nothing Then
				Set rtitem = doc.CreateRichTextItem( "Body" )
			End If
			
			Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", fpath & ffile )
			
			If cfg_pcs_epdfsim <> "" Then
				doc.ePDF_flg = Date$ & " " & Time$ & " PDFCreator"
				doc.ResultCodeGW = cfg_resultcodegw
			End If
			
			Call doc.Save( True, True )
			
		End If
		
		Print "Converting document " & c & " / " & dc.Count
		
		
weiter:
		Sleep(1)
		
		Set doc = dc.GetNextDocument(doc)
		
	Loop
	
	Set oPDFC = Nothing
	
	Print dc.Count & " Dokumente verarbeitet."
	
	Dim uiview As NotesUIView
	Set uiview = ws.CurrentView
	Call uiview.DeselectAll
	
	Exit Sub
	
	
error_handle:
	' Handle your own error handle ... ;-p
	
End Sub

Titel: Re: E-Mail als pdf ablegen
Beitrag von: klaussal am 20.11.08 - 09:27:53
Danke !  :D :D :D
Titel: Re: E-Mail als pdf ablegen
Beitrag von: y20frank am 20.11.08 - 09:45:04
Gerne.... Script müsst ihr aber noch anpassen , denke aber der kern ist allgemein brauchbar.
Gruß nach Herne (hoch lebe der Pott).,

LG
Frank
Titel: Re: E-Mail als pdf ablegen
Beitrag von: DaHias am 21.11.08 - 10:44:22
Ok danke :)
Mal schauen was sich daraus basteln lässt :)
Titel: Re: E-Mail als pdf ablegen
Beitrag von: stf am 21.11.08 - 12:51:20
Hi Frank,

schönes Script...

habe mich mit meinen begrenzten Möglichkeiten darüber hergemacht und habe prompt ein Problem....

Bei mir bleibt das Script hängen wenn ich Dateien mit Anhang umwandle
und zwar bei (glaube ich)
      ' count print jobs in queue
      Do Until oPDFC.cCountOfPrintjobs = i
         Doevents
      Loop
hängen bleiben heißt: Prozessorauslastung geht hoch und LN lässt sich nicht mehr kontrollieren
mit STRG + Unterbrechen kann ich das dann beenden.

Wenn ich o.g. Teil rausnehme, werden nicht alle ausgewählten Mails konvertiert...(sondern wenn ich Glück habe nur das erste)

Bei Mails ohne Anhang funktioniert das Script (ohne den oberen Teil)

Kannst Du Dir einen Reim darauf machen?

Übrigens: LN Vers. 7.03 PDFCreator 0.9.6

Danke
Stefan
Titel: Re: E-Mail als pdf ablegen
Beitrag von: Klafu am 21.01.09 - 13:19:39
Danke für das Script.
Ich habe es umgebaut und passt soweit fast perfekt.
Nur wird bei mir leider oPDFC.cCombineAll und oPDFC.cPrinterStop = True/False nicht gemacht.
Die Com Hilfe gibt leider nicht so viel her. Setzen die zwei befehle irgendwas voraus ?
Titel: Re: E-Mail als pdf ablegen
Beitrag von: Christopher am 21.01.09 - 19:47:06
such mal bei openntf iText da gibt es eine Java Lösung hat den Vorteil Du mußt nix installiert haben ....
Titel: Re: E-Mail als pdf ablegen
Beitrag von: Klafu am 22.01.09 - 15:25:09
Danke. Aber ich denke, da ich nun mit dem script schon eine optimale lösung habe macht es nicht viel Sinn, kurz vor Abschluss auf eine andere Möglichkeit zu setzen.

Chris