Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateien drucken mit frei wählbarem Drucker (https://www.delphipraxis.net/118530-dateien-drucken-mit-frei-waehlbarem-drucker.html)

mOfl 9. Aug 2008 19:08


Dateien drucken mit frei wählbarem Drucker
 
(Delphi 7 Personal)

Ich grüße euch!

Ich arbeite gerade an einem Programm, bei dem am Ende sehr viele Dateien (vor allem Vektorgrafiken) ausgedruckt werden müssen. Vorher muss ein Drucker (auch USB- oder Netzwerkdrucker) ausgewählt werden, alle Dateien werden dann auf dem gleichen Drucker gedruckt. Weiß einer, wie ich das löse? Ich fand das Problem zuerst selbst banal, aber habe trotz aufmerksamer Suche keine Lösung finden können.

Delphi-Quellcode:
ShellExecute(handle, 'print', 'datei.txt/d:LPT1', '', '', SW_HIDE);
funktioniert zum Beispiel nicht, weil der Drucker eben nicht LPT1, sondern USB oder übers Netzwerk läuft. Außerdem hab ich mir sagen lassen, wer mit ShellExecute druckt, frisst auch kleine Kinder... man will ja in nichts hinein geraten...

Meine Hilflosigkeit rührt vor allem daher, dass ich keine Ahnung habe, wie man eine beliebige (Text-/Bild-)Datei in Delphi druckt, ohne ShellExecute zu benutzen. Ich lese hier immer wieder was von Canvas, aber das gilt glaube ich nur dafür, wenn man den Inhalt eines Delphi-Programms (RichEdit, Memo,...) drucken will.

Da das Programm sehr viele Dateien drucken muss, sollte der Drucker (im Idealfall durch den Druckerdialog) nur einmal gewählt werden müssen, sodass alle anderen Dateien automatisch auf den Drucker gedruckt werden, ohne diesen Drucker zum Windows-Standarddrucker zu machen. Vermutlich suche ich doch am ehsten eine Möglichkeit, einen beliebigen Drucker im Druckerdialog auszuwählen und dann auf diesem über den Shell-Befehl zu drucken. Wie gesagt, es sind eben verschiedene Dateien, vor allem Vektorgrafiken, die (glaube ich) nicht programmintern gedruckt werden können.

Weiß einer Rat?
Grüße
Dani

p80286 9. Aug 2008 19:49

Re: Dateien drucken mit frei wählbarem Drucker
 
Hallo mOfl,

entschuldige, aber Du hast eine etwas naive Vorstellung von Drucken. Im Prinzip läuft das immer so ab:
Daten -> Treiber -> Drucker
Das heißt Deine Daten werden durch einen Treiber so aufbereitet, das sie auf dem Drucker richtig ausgegeben werden. Dazu mußt Du dem Treiber gegenüber natürlich sagen, was Du für Daten drucken willst. Z.B. diese Zeile Fett wird in die notwendigen Steuerzeichen für den Drucker + Text ungesetzt. Die andere Möglichkeit hast Du schon angesprochen. Auf dem Canvas wird ein Bild gezeichnet (das auch wie Text aussehen kann) und das wird dann an den Drucker als Bild bzw. die notwendigen Steuerzeichen weitergereicht.

Die bekannte Methode
copy TEXT_DATEI.TXT LPT1:
funktioniert nur, weil die notwendigen Steuerzeichen CR LF schon enthalten sind. Und dann nur wenn die einzelnen Textzeilen schon an die maximale Druckbreite angepasst sind.

Wenn Du also beliebige Dateien ausdrucken willst hast Du 2 Möglichketen:
a) Die Datei unter Delphi einlesen, interpretieren, auf der Canvas darstellen und dann ausdrucken
b) wie Du schon angedeutet hast mit Hilfe von SHELLEXECUTE ein Interpreterprogramm aufrufen,daß dann auch den Ausdruck übernimmt. Dann ist die Druckeransteuerung allerdings von dem Interpreterprogramm abhängig.
Eine andere Version von b) ist z.B. die das füttern von Word mit Word-Dateien und dann das Anstoßen des Ausdrucks in Word, das läuft dann unter OLE.


Gruß
K-H

soweit ich weiß ist print im Prinzip das gleiche wie copy xxxx LPT1: nur nicht ganz so direkt, es wird auch der Spooler genutzt.

Au Mann, PS-Drucker verstehen natürlich nur PS, und GDI-Drucker auch nur GDI, also Copy ... bedingt natürlich eine Datei, die vom Drucker verstanden wird!

marabu 10. Aug 2008 07:31

Re: Dateien drucken mit frei wählbarem Drucker
 
Moin Dani,

wenn du in deinem Programm den TPrinterSetupDialog verwendest, damit der Benutzer zur Laufzeit den Drucker auswählen kann, so bleibt diese Auswahl bis zum Programmende erhalten und gilt nur für dein Programm. Alternativ kannst du auch alle vorhandenen Drucker untersuchen, ob mindestens einer dabei ist, der für deine Zwecke genügt.

Was das Drucken von Dateien angeht, so ist zu unterscheiden, ob die Daten erst noch durch den Druckertreiber aufbereitet werden müssen oder ob sie bereits aufbereitet sind. "Vor allem Vektorgrafiken" in Verbindung mit "Drucker" ist keine ausreichend genaue Beschreibung deines Problems. Welche unterschiedlichen Datenformate möchtest du drucken? Auf welchem Drucker (Modell, Fähigkeiten)?

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz