Autor Thema: Distiller zum PDF erzeugen  (Gelesen 10647 mal)

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Distiller zum PDF erzeugen
« am: 04.01.06 - 13:26:10 »
Hallo Gemeinde!

erstmal ein frohes neues Jahr 2006!

Ich stehe vor dem Problem, dass ich per Script ein Word-Dokument mit Daten aus Notes fülle, es für die Archivierung abspeichere und aus diesem Dokument dann ein PDF machen möchte. Das geht mit dem Destiller als Drucker ganz gut, aber leider nicht vollautomatisch. Drucken in eine Datei ist auch nicht das wahre bzw. ein Zwischenschritt, dann muss der Distiller als Objekt definiert werden, denn ich habe da was aufgeschnappt mit oDistiller.FileToPDF...

Oder braucht man zwingend das SDK von Adobe, um solche Dinge zu realisieren?

Vielleicht hat da schon jemand Erfahrungen gemacht oder kann mir sagen, wie der Distiller als Objekt mit createObject definiert wird...wäre toll!

Danke im Voraus!
Rudi

Driri

  • Gast
Re: Distiller zum PDF erzeugen
« Antwort #1 am: 04.01.06 - 13:34:29 »
Muß es über den Distiller sein ? Das klingt auch nach nem teueren Vergnügen.

Und wenns was kosten darf, könnte man sich auch existierende Tools anschauen. Z.B. gibts von der Groupware AG einen PDF-Server, wo man überverschiedene Möglichkeiten Dokumente in PDF umwandeln lassen kann (http://www.groupware-ag.de/epdf.html).

Ansonsten gabs auf dem letzten Entwicklercamp einen Vortrag, wo eine Konvertierung über XML/XSLT vorgestellt wurde. Wäre evtl. eine Alternative.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Distiller zum PDF erzeugen
« Antwort #2 am: 04.01.06 - 13:45:26 »
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.
Code
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
« Letzte Änderung: 04.01.06 - 13:46:57 von kennwort »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Distiller zum PDF erzeugen
« Antwort #3 am: 04.01.06 - 13:46:58 »
Möglich wäre auch noch der Aufruf von Ghostscript, das kann das auch.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Re: Distiller zum PDF erzeugen
« Antwort #4 am: 04.01.06 - 14:05:24 »
Danke für die Tipps. aber Agenten und PDF-Server sind mir zu hoch gegriffen. Vielleicht sollte ich konkreter den Ablauf beschreiben:

Es wird aus einem NotesDokument heraus ein Word-Dokument mit den Daten erstellt und gefüllt und anschließend gespeichert und gedruckt, Word bleibt dabei vollständig im Hintergrund.

Bei dem neuen Ablauf soll as Word-Dokument soll quasi nicht gedruckt, sondern statt dessen in ein PDF oder TIFF umgewandelt werden (automatisch, die User speichern die Dokumente ja doch wieder ins Irgendwo und fangen dann an zu weinen, ich auch...) und anschließend automatisch an eine Notes-Email angehängt werden. Die Email wird schon mit allem notwendigen Angaben ausgefüllt und zur weiteren Bearbeitung geöffnet.

Ist soweit alles klar und funkt auch, bis auf das automatische Speichern des PDF-Dokuments. Es sollte doch möglich sein, den Distiller per CreateObject als Applikation zu laden. Vielleicht hat auch jemand ein Code-Schnipsel für mich übrig  ;-)



Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Distiller zum PDF erzeugen
« Antwort #5 am: 04.01.06 - 14:37:51 »
Dann solltest du dich an ein pdf distiller Forum wenden. Aber bitte hier mitteilen.
Über einen Druckertreiber öffnet sich natürlich Word im Hintergrund. Ich halte es persönlich auch für die einfachere Lösung. Aber für verschiedene Leute sind eben unterschiedliche Dinge verschieden kompliziert (ohne jede Wertung).


Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Re: Distiller zum PDF erzeugen
« Antwort #6 am: 04.01.06 - 14:47:41 »
@Axel: Das mit dem Adobe-Forum habe ich schon befürchtet, aber wenigstens siehst Du den Lösungsansatz ebenfalls wie ich: einfach für den Anwender, umständlich für den Entwickler ;-)

@Alle: Falls Ihr mir trotzdem weiterhelfen könnt, wäre das richtig Klasse!

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Re: Distiller zum PDF erzeugen
« Antwort #7 am: 04.01.06 - 14:49:11 »
Ach ja, es muss ja nicht unbedingt ein PDF sein, ein TIFF wäre auch toll  O0

@Axel: Falls sich was findet, werde ich es auf jeden Fall hier posten!

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Re: Distiller zum PDF erzeugen
« Antwort #8 am: 04.01.06 - 16:51:19 »
Das war ich bis vorhin:   ???

Jetzt bin ich das:  ;D

und hier (tätä) ist die Lösung:

      
       Set wrd = createobject("Word.Application")
       Set ard = createobject("PDFDistiller.PDFDistiller6")
      
       wrd.Visible = False
       wrd.ScreenUpdating = False
       wrd.ActivePrinter = "Adobe PDF"

'Word Dokument öffnen und mit Distiller als PS-Datei "ausdrucken"
       Set doc = wrd.Documents.Open("c:\balkow.doc")
       doc.PrintOut False, False, , "c:\test.ps", , , , , , , True
       doc.Close False
       wrd.Quit False
       Set doc = Nothing
       Set wrd = Nothing

'Distiller zum Konvertieren öffnen   
       ard.bShowWindow = True
       ard.FileToPDF "c:\test.ps", "c:\Balkow.pdf", True
       Set ard = Nothing

'Alte PS-Datei löschen
       Kill "c:\test.ps"
'Des wars
       Exit Sub
PDF_error:
       Debug.Print "Error"
       wrd.Quit
       Set doc = Nothing
       Set wrd = Nothing
       Set ard = Nothing

Eigentlich ist das ganz einfach, wenn man weiss, wie man das Distiller-Objekt ansprechen muss...und es ist eine einfache Lösung, in die der geneigte Anwender nicht reinpfuschen kann.

Grüße!


Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Distiller zum PDF erzeugen
« Antwort #9 am: 04.01.06 - 22:29:35 »
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.

Das klappt natürlich nicht wie ich mir das gedacht habe. Man kann von Java keinen Notes Agenten ansprechen, der UI-Objekte benutzt.
Es geht einfach nicht.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Re: Distiller zum PDF erzeugen
« Antwort #10 am: 05.01.06 - 08:12:15 »
Guten Morgen! Denke mal, Dein Posting sollte woanders stehen...und im Übrigen klappt das wirklich nicht.


Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Geht auch per PDFCreator
« Antwort #11 am: 04.05.07 - 21:21:06 »
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:

Code
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
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Driri

  • Gast
Re: Distiller zum PDF erzeugen
« Antwort #12 am: 07.05.07 - 09:05:38 »
Sieht interessant aus, dazu mal eine Frage. Kann ich mit dem PDFCreator nur vorhandene Dateien ins PDF drucken ? Ich habe mal in der Hilfe zu COM nachgesehen und finde da nur die Subroutine cPrintFile.

Oder bleibt für ein NotesDocument nur der Umweg über z.B. eine Worddatei, die man dann vorher erzeugen muß ?

Offline Matthias1974

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
    • Matthias Schlimm
Re: Distiller zum PDF erzeugen
« Antwort #13 am: 07.05.07 - 09:17:00 »
Hallo Diri,

ich habe auch seit kurzem den PDF-Creator als Dienst am Print-Server laufen, da kannst Du aus jeder Anwendung heraus direkt ein PDF-File erzeugen, läuft problemlos. Bei uns wird das PDF-File im Homedirectory des Benutzers erzeugt.
Matthias Schlimm

76829 Landau i.d. Pfalz

Domino-Server V7.0.2 auf iSeries und Windows, Clients V7.0.1,Commontime mNotes/Suite, Windows2k, 2003, WinXP, Citrix PS 4.5, Sametime 7.5

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Distiller zum PDF erzeugen
« Antwort #14 am: 07.05.07 - 09:32:05 »
Den PDFCreator per cDefaultprinter als Standard-Drucker und wieder zurück zu setzen, scheint leider nur in Zusammenhang mit dem cPrintFile zu funktionieren (@matthias: ist das anders, wenn er als Dienst installiert ist? falls ja: wie steuere ich das per COM an?)

Ein temporäres Word-File ist sicher ein möglicher Problemlösungsansatz. Die Druckereinstellung per API-Calls (RegQueryValueEx / RegSetValueEx) zu steuern und dann das Notes-Dokument direkt als PDF zu drucken, erscheint mir aber, da Office-unabhängig, naheliegender.
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Driri

  • Gast
Re: Distiller zum PDF erzeugen
« Antwort #15 am: 07.05.07 - 10:23:57 »
Danke für die Info  :)

Offline Matthias1974

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
    • Matthias Schlimm
Re: Distiller zum PDF erzeugen
« Antwort #16 am: 07.05.07 - 10:36:04 »
Die Doku zum installieren des Serverdienstes gibt es unter http://pdfforge.org/node/560.
Bin leider kein COM-Guru  ;D . Die Parameter stelle ich dann an der Konsole des PDF-Creator ein.


Matthias Schlimm

76829 Landau i.d. Pfalz

Domino-Server V7.0.2 auf iSeries und Windows, Clients V7.0.1,Commontime mNotes/Suite, Windows2k, 2003, WinXP, Citrix PS 4.5, Sametime 7.5

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Distiller zum PDF erzeugen
« Antwort #17 am: 08.05.07 - 15:16:38 »
Nach einigem Basteln komme ich zu der Überzeugung, dass Du mit Deiner Idee, eine temporäre Word-Datei zur Konvertierung als PDF zu erzeugen, wohl doch richtig(er) liegst, Ingo:
Auf lotusrnext.net findet sich zwar eine nette Musterlösung zur Manipulation der Druckerauswahl per Registry, um so das uidoc.print(...) nutzen zu können - Notes will aber zumindest bis R 6.5* im Gegensatz zu Redmond-Produkten die Auswahl des Druckers nicht zur Laufzeit des Skripts aktualisieren, so dass Frickeleien mit Werte-Zwischenspeicherung in Dokument-Feldern und Auslösung des PDF-Drucks im queryclose nötig werden.

(*An die 7er-Fahrer: hat sich diesbezüglich etwas geändert?)
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline ozzy1206

  • Frischling
  • *
  • Beiträge: 47
Re: Distiller zum PDF erzeugen
« Antwort #18 am: 09.05.07 - 12:35:39 »
Nach einigem Basteln komme ich zu der Überzeugung, dass Du mit Deiner Idee, eine temporäre Word-Datei zur Konvertierung als PDF zu erzeugen, wohl doch richtig(er) liegst, Ingo:

Hi,

wie würde man das effektiv bewerkstelligen, will heissen: Wie bekomme ich denn das Notes-Dokument möglichst 1:1 in Word rüber ?

Sorry, bin auf dem Gebiet noch nicht so weit vorgedrungen, daher die Frage  :) !

Gruß

ozzy

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Distiller zum PDF erzeugen
« Antwort #19 am: 09.05.07 - 12:46:36 »
Hier findest Du eine LS-Klasse zur Datenübergabe an MS Word. "A bissla" Lotusscript solltest Du aber schon können ...
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz