Mit epdf habe ich keine guten Erfahrungen gemacht. Das packt keinen komplexen RichText. Viele Leute haben sich hier sehr unzufrieden über das Tool geäußert Mit xml/xslt ist die dokumenten-echte Konvertierung von xml/xslt übrigens auch nicht sichergestellt. IBM gibt das zu, arbeitet aber daran. Ich vermute btw. stark, dass dies das eigentliche Problem von epdf ist.
Es gibt genug PDF Druckertreiber, die beliebige Dokumente (u.a. auch Notes) in PDF umwandeln können.
Ich benutze für Notes-Dokumente einen dedizierten Rechner, der gescheduled die Drucks durchführt. Das geht über einen clientseitigen Agenten, der den Druck durchführt. Auf dem Server geht ja kein Drucken.
Das Problem ist, den Agenten zu schedulen.
Für Word Dokumente ist es nicht so schwierig eine wsh Datei oder eine VB-exe zu schreiben, die in ein bestimmtes Verzeichnis nach Word-Dokumenten sucht und dann diese mit dem pdf Druckertreiber ausdruckt (d.h. in PDF konvertiert).
Für Notes-to-tif: Nachdem ich keine guten Erfahrungen mit Windows-XP scheduling und wsh-Dateien gemacht habe (nach einer gewissen Zeit kommen automation errors), mache ich dieses scheduling mit quartz. Zum Glück arbeitet jemand gerade an einem Buch, so dass es für umsonst prima Doku-Material gibt: http://www.opensymphony.com/quartz/book_chaps.html
Klappt gut: Hier der log eines Programms, das einmal in einem bestimmten Rythmus 4 wechselnde Notes Agenten aufrufen soll. Der aufgerufene Agent kann dann ja uidoc Operationen ausführen.
Hier ist ein aktuelles Log. Sieht gut aus.
INFO [QuartzScheduler_Worker-0] (ScanDirectoryJob.java:37) - ScanDirectory1 fired at Wed Jan 04 13:44:00 CET 2006
INFO [QuartzScheduler_Worker-0] (ScanDirectoryJob.java:45) - next agent:2
INFO [QuartzScheduler_Worker-0] (ScanDirectoryJob.java:37) - ScanDirectory1 fired at Wed Jan 04 13:45:00 CET 2006
INFO [QuartzScheduler_Worker-0] (ScanDirectoryJob.java:45) - next agent:3
INFO [QuartzScheduler_Worker-0] (ScanDirectoryJob.java:37) - ScanDirectory1 fired at Wed Jan 04 13:46:00 CET 2006
INFO [QuartzScheduler_Worker-0] (ScanDirectoryJob.java:45) - next agent:4
INFO [QuartzScheduler_Worker-0] (ScanDirectoryJob.java:37) - ScanDirectory1 fired at Wed Jan 04 13:47:00 CET 2006
INFO [QuartzScheduler_Worker-0] (ScanDirectoryJob.java:45) - next agent:1
hoffe das ist einigermassen verständlich
Axel
Uups, dass ich diesen Post erst jetzt finde ... habe mir inzwischen selbst etwas mit dem PDFCreator http://www.pdfforge.org/products/pdfcreator/, einem freien PDF-Druckertreiber unter GNU GPL, gebastelt.
Das Skript kann auch mehrere Dateien zu einer einzigen PDF-Ausgabedatei kombinieren:
Function file2PDF(fileNames As Variant,outPath As String,outFile As String) As String
%REM
**********************************************************************************
Uses the PDFCreator COM - http://www.pdfforge.org/products/pdfcreator
to convert one or multiple files (and combine, if neccessary) to PDF
**********************************************************************************
Example use:
Dim fileNames List As String
Dim outPath As String
Dim outFile As String
fileNames(1) = "c:\temp\test1.doc"
fileNames(2) = "c:\temp\test2.doc"
fileNames(3) = "c:\temp\test.xls"
outPath="c:\temp\"
Combined output file(s) name:
outFile="output.pdf"
If you don't want a combined output file, specify
outFile=""
Msgbox file2PDF(fileNames,outPath,outFile),64,"file2PDF Ausgabemeldung"
**********************************************************************************
by jo@chim - version 2007/05/04
**********************************************************************************
%END REM
Dim PDFCreator As Variant
Dim combine As Boolean
Dim DefaultPrinter As String
Dim success As String
Const sleepTime = 1 'Printer needs some sleepin' to avoid PDFCreator crash
If Dir(outPath)="" Then
file2PDF="The output path '" & outPath & "' does not exist"
Exit Function
End If
If outFile ="" Then
combine=False
Else
combine=True
End If
Set PDFCreator = CreateObject("PDFCreator.clsPDFCreator")
With PDFCreator
.cStart "/NoProcessingAtStartup"
.cVisible = False
.cWindowState = 1
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveFormat") = 0
.cOption("AutosaveDirectory") = outPath
DefaultPrinter = .cDefaultprinter
.cDefaultprinter = "PDFCreator"
.cClearcache
Forall cFile In fileNames
If Dir(cfile)="" Then
success= success & Chr$(10) & "'"& cFile & "' does not exist"
Elseif Not .cIsPrintable(cFile) Then
success= success & Chr$(10) & "'"& cFile & "' cannot be converted to PDF"
Else
j=0
If combine=False Then
For i = 1 To Len(cFile)
If Instr(i,cFile,"\")<>0 Then
j=Instr(i,cFile,"\")
End If
Next i
outFile=Right(cFile,Len(cFile)-j)
.cOption("AutosaveFilename") = outFile
.cPrintfile cFile
.cPrinterStop = False
Sleep sleepTime
Else
.cPrintfile cFile
Sleep sleepTime
End If
success= success & Chr$(10) & "'"& cFile & "' has been converted"
End If
End Forall
If combine =True Then
.cOption("AutosaveFilename") = outFile
.cCombineAll
.cPrinterStop = False
Sleep sleepTime
success= success & Chr$(10) & Chr$(10) & "Combined output file:" & Chr$(10) & outPath & outFile
End If
.cDefaultprinter = DefaultPrinter
.cClearcache
.cClose
End With
Set PDFCreator =Nothing
file2PDF=success
End Function
Wie hast Du den Drucker gewechselt per Win-API geht es unter 200, XP und ich glaube sogar schon unter NT 4 nicht mehr.
Aber mit dem WSH kannst Du zur Laufzeit den Druckertreiber wechseln.'Print mit WSH
Sub Initialize
Call myprinter("FreePDF XP") ' hier Drucker eintragen, es funktionieren auch Netzdrucker
End Sub
Sub myprinter(printer As String)
Dim ws As New NotesUIWorkspace
dim session as New NotesSession
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim PrinterPathAndName As String
Dim objNetwork As Variant
Set db = session.CurrentDatabase
PrinterPathAndName = printer
Set objNetwork = CreateObject("WScript.Network")
objNetwork.SetDefaultPrinter PrinterPathAndName
Print "aktueller Drucker ist jetzt " + Cstr(PrinterPathAndName)
Set uidoc = ws.CurrentDocument
Call uidoc.Print( 1 )
End Sub