![]() |
Liste von Dokumenten (doc, pdf) drucken
Hallo,
ich hätte eine Frage zum drucken von Dokumeten aus Delphi heraus. Ich habe zu dem Thema schon einige Sachen gefunden und auch ausprobiert, bin aber noch nicht auf die richtige Variante gestoßen die ich für meinen Fall nutzen kann. Mein Problem: Ich habe über Delphi ein Array aufgefüllt in dem Pfade + Filenamen zu Dokumenten abgelegt sind. z.B.
Delphi-Quellcode:
Danach möchte ich dieses Array abarbeiten und jedes File im Hintergrund ausdrucken. Habe versuchtC:\Dokumente\Handbücher\Thema1\Handbuch1.pdf C:\Dokumente\Handbücher\Thema2\Handbuch1.doc C:\Dokumente\Handbücher\Thema2\Handbuch2.doc C:\Dokumente\Handbücher\Thema3\Handbuch1.pdf ... über Shellexecute den Ausdruck zu erreichen.
Delphi-Quellcode:
Das dumme nur ich kann keinen speziellen Drucker beim ShellExecute mitgeben. Sollte einen Drucker aus einer Druckerliste übergeben können. Bzw. ich bekomme vom Drucker auch keine Rückmeldung auf das ich warten könnten ShellExecute(Application.Handle, 'print', PChar('C:\Dokumente\Handbücher\Thema1\Handbuch1.pdf'), NIL, NIL, SW_SHOWNORMAL); ... um das nächste File zu übergeben. Zweiter Versuch dann über TPrinter von Delphi. Dort habe ich was gefunden mit dem Texte, Bilder, ... aus Delphi heraus ausgedruckt werden können. Man kann über eine ComboBox einen Printer auswählen und dem Printer dann den Text übergeben. Habe nur das wesentlich dazu als Bsp. eingefügt.
Delphi-Quellcode:
Habe dort aber nichts gefunden um z.B. dann ein Doc oder pdf - File zu übergeben und dieses dann auszudrucken.
...
printer.printerindex:= combobox1.itemindex; printer.begindoc; printer.canvas.textout(100,100,'Testzeile'); printer.enddoc; ... Dritter Versuch habe was speziell über WordDokumente gefunden. Dazu muß man ein TWordDocument und ein TWordApplication in das Projekt einfügen. Danach kann dann das File über eine Connection über diese Komponenten übergeben werden.
Delphi-Quellcode:
Hier das Problem kann natürlich nur Word Dokumente übergeben. Das andere ich muß speziell den Drucker mit OK
...
WordApplication1.Connect; WordApplication1.Visible:=false; VarFileName:='C:\Dokumente\Handbücher\Thema2\Handbuch1.doc'; WordApplication1.Documents.Open(VarFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); WordDocument1.ConnectTo(WordApplication1.ActiveDocument); Background:=false; Append:=false; Range:=wdPrintAllPages; WordDocument1.PrintOut(Background, Append, Range); WordDocument1.Close; WordDocument1.Disconnect; WordApplication1.Disconnect; ... Button starten. Auch keine gute Lösung. Rückmeldung auf Erfolg gibt es auch nicht. Bei allen drei Variante habe ich das Problem das ich vom Drucker keine Rückmeldung bekomme bevor ich das nächste File dem drucker schicken kann. Sozusagen bleibe ich im Delphi Quellcode nicht stehen und kann warten auf die rückmeldung eines erfolgreichen ausdrucks. Desweiteren muß ich speziell jedes Dokoment mit OK bestätigen damit es zum drucker gesendet wurde. Hat jemand eine Lösung mit dem man ein Array abarbeiten kann und dort jedes Dokument schritt für schritt an den drucker senden und ausdrucken kann? Vielleicht funktioniert es ja auch mit einer der oberen Varianten, aber ich bin irgendwie nicht draufgekommen bzw. habe kein gutes Tutorial gefunden, mit dem ich dieses Problem lösen könnte. Vielleicht gibt es auch was ganz anderes wie man so was lösen kann. Bin über jede Hilfe dankbar. |
Re: Liste von Dokumenten (doc, pdf) drucken
Du kannst Dateien normalerweise nicht einfach so aus Delphi heraus drucken. Um ein Worddokument zu drucken, muss es ersteinmal geöffnet werden, und das kann nun mal nur Word. Und auch nur Word kann dieses File drucken... Gleiches gilt für PDF. Eventuell gibt es Komponenten, die du unter Delphi einbinden kannst (für PDF sicherlich), aber Word ist wirklich ein heisses Thema. Und genau aus dem Grund habe ich das Tool
![]() entwickelt. Ist ein Konsolenprogramm, das mit gewissen Parametern aufgerufen wird, um ein Word Dokument an einen Drucker zu schicken. Das Prinzip basiert auf OLE, d.h. Word muss auf dem Rechner installiert sein. Was die PDF anbelangt, da kannst du GhostScript (als Zusatz GhostView) benutzen. Da gibt es ein Tool namens gsprint.exe, welches PDF direkt ausdrucken kann. Ghostscript muss auch hier auf dem Rechner installiert werden. |
Re: Liste von Dokumenten (doc, pdf) drucken
Vielen Dank erstmal für die Antwort. :lol:
Ich schaue mir gleich mal Ihr Tool an. Das Word oder der Adobe Reader gestartet werden muß wäre ok. Bei ShellExecute macht er ja auch Word oder den Adobe Reader auf. Das einzigste was ich brauche ist das ich nach und nach das Array mit den Files abarbeiten und ausdrucken kann. Ob da Word oder der Adobe Reader aufgemacht wird ist egal. Nochmal Danke. |
Re: Liste von Dokumenten (doc, pdf) drucken
(Nicht Acrobat... GhostScript bzw. gsprint.exe für die PDFs)
Zu den Word Dokumenten: Es wird immer eine Instanz von Word geöffnet->Dokument geladen->gedruckt->Dokument geschlossen->Word beendet... Das funktioniert, ist aber langsam, immer wieder eine neue Wordinstanz zu starten, wenn du mehrere Dokumente drucken willst. Es existiert aber ein Parameter in PrintDoc, bei dem du angeben kannst, ob Word geschlossen werden soll nach dem Drucken oder nicht.... Das beschleunigt die Sache erheblich. |
Re: Liste von Dokumenten (doc, pdf) drucken
Wie funktioniert das mit dem GhostScript gsprint.exe genau bei pdf Files?
Das ich mehrere Dokumente (docs) drucken kann funktioniert noch nicht wirklich. Wie kann ich eine Liste (Array) abarbeiten und übergeben? Sollte bei jedem Dokument auf die Rückmeldung warten das es fertiggedruckt wurde. |
Re: Liste von Dokumenten (doc, pdf) drucken
Zitat:
Zitat:
|
Re: Liste von Dokumenten (doc, pdf) drucken
Weist du vielleicht wo es eine gute Doku dazu gibt?
Das andere gibt es nicht die Möglichkeit eine ganze Liste an Files zu übergeben die abgearbeitet und gedruckt werden kann? |
Re: Liste von Dokumenten (doc, pdf) drucken
Also den Ausdruck habe ich soweit mit ShellExecute und GsPrint reicht mir eigentlich, ohne das ich irgendwas betätigen muß, aber wie kann ich nur eine Liste übergeben?
Delphi-Quellcode:
ShellExecute(Handle, 'printto', PChar('D:\Test.doc'), nil, nil, SW_HIDE); ShellExecute(Handle, 'open', 'C:\Programme\Ghostgum\gsview\gsprint.exe', PChar('D:\Test.pdf'), '', SW_HIDE); Vielleicht weis jemand wie man das realisieren kann? Möchte nicht alle Files auf einmal zum drucker jagen. Eins nach dem anderen. Sollte irgendwie zwischendrin warten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz