![]() |
Sonderfunktionen eines Drucker ermitteln und setzen?
Ich habe ein Delphi-Programm mit dem ich aus einer Dos-Box oder einem Dos-Programm ohne Dialog eine Datei auf einem Windowsdrucker ausdrucken kann. Druckerauswahl und allgemeine Druckereinstellungen werden dabei als Parameter übergeben. Das funktioniert auch bei den meisten Druckern nur habe ich nun ein paar neue Drucker "Ricoh Aficio 1232 C" ins Netz gekriegt. und die verlangenen im PrinterSetupDialog einen Anwendercode. Da die alte Dos-Anwendung meist im Vollbildmodus läuft bzw. automatisch druckt (Packscheine etc.) kann ich den Druckerdialog auch nicht einfach anzeigen weil oft garkein Anwender davor sitzt.
Meine Frage nun, wie kann ich derartige Druckerspezifische Funktionen ermitteln und vor allem auch setzen? Mit PrinterProperties, DeviceCapabilities, GetDeviceCaps und SetDeviceCaps find ich bisher nur allgemeine Einstellungen, nicht aber diese spezielle Funktion. Gruß, Bernd |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
Hallo Bernd,
die Eingabe eines user code ist doch wahrscheinlich nur für das accounting im interaktiven Betrieb notwendig. Wenn du darauf verzichten kannst solltest du diesen Modus wegkonfigurieren können. Grüße vom marabu |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
marabu schrieb:
Zitat:
leider sind die Drucker Etagendrucker und werden von mehreren Abteilungen genutzt. Daher sind die Usercodes für die Kostenverteilung nötig. Ich kann den Krempel also leider nicht wegkonfigurieren. Habe nun schon versucht den Usercode via Escapesequenz in PCL/PJL zu setzen. Das tut allerdings auch nicht.
Delphi-Quellcode:
Wenn ich allerdings vorher einen TPrinterSetupDialog ausführe dann funktioniert es.
...
Printer.BeginDoc; Escape(Printer.Handle, PASSTHROUGH, 0, '@PJL SET USERCODE="xy"', nil); Printer.TextOut('Testdruck'); Printer.EndDoc;
Delphi-Quellcode:
Das hilft mir nur nicht weiter da einige Programme zum Druck von Packscheinen und Arbeitspapieren ohne Anwendereingaben drucken müssen.
...
if PrinterSetupDialog.Execute then begin Printer.BeginDoc; Printer.TextOut('Testdruck'); Printer.EndDoc; end; Ich hab daher die Funktionen des TPrinterSetupDialogs mal um den eigentlichen Dialogaufruf abgespeckt. Das hilft aber auch nicht. D.h. trotz GetPrinter/SetPrinter und dem ganzen Krempel läuft auch nix. Auf den Seiten von Ricoh gibt es im bezahlbaren Bereich auch keine Infos und der Händler ist mit der Frage auch überfordert. Hoffe nun auf einen Tip von jemand der mit dem Problem vielleicht schon konfrontiert war. Gruß, Bernd |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
Hallo Bernd,
habe gerade keinen Ricoh Aficio 1232 C zur Hand. Ich habe statt dessen meinen OKI C5300DN untersucht. Das accounting feature wird über eine spezielle printer control software gesteuert, die als server und client Variante installiert wird. Wenn ich das job accounting aktiviere, dann kann ich unter anderem zwischen popup und hidden mode wählen. Im popup mode muss der user seine credentials in einen Dialog eintippen, im hidden mode legt der Admin einen control file an, der dann befragt wird. Vielleicht arbeitet der Ricoh ähnlich? marabu |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
Hallo marabu,
heissen Dank für den Tip, werde mich da in der Richtung noch schlau machen. Gruß, Bernd |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
Hi marabu,
ich bin jetzt ein Stückchen weiter gekommen. Dein Lösungsansatz war mir noch nicht so genehm weil es einfach einen klareren Ansatz in Punkto Programmierung geben muss. Von Ricoh hab ich zwar noch immer keine Antwort - spricht für den Hersteller, scheint also sehr lean oder outgesourced zu sein - also da kann man wirklich für billiges Geld kaufen zu können! - TCO!...? Mein Händler hat mich aber zwischenzeitlich um ein "Printfile" gebeten und das Thema hat mich weiter gebracht. Mit einem Printerdialog bzw. einem PrinterSetupDialog vor dem Druck tut es. Ich hab dann einfach mal PrinterDialog.Options := [poPrintToFile] gesetzt und in eine Datei gedruckt. Das Ergebnis war, dass nach dem Printer.BeginDoc schon Daten im Druckspooler sind bevor mit Escape(...) Sequenzen rüber gehen. das scheint den Drucker zu irritieren weil er von den beiden Dialogen (PrintDialog und PrinterSetupDialog) gewohnt ist seine PJL-Commands am Anfang des Druckstreams zu kriegen. Habe darauf hin in der printers.pas nachgeschaut was bei BeginDoc so passiert und da geht einiges ab. Zur Info gibt es von Borland einen Hinweis ohne TPrinter zu drucken ![]() ![]() Ggf. ist bei letztem Link noch ein Refresh zu machen weil man sonst beim ersten Aufruf nicht immer auf dem Link selbst landet. Mein Problem scheint nun irgendwo zwischen dem Dialog und direkt nach Printer.BeginDoc zu liegen. Im TPrinterSetupDialog gibt es ein Konstrukt lpszIrgendwas:= DialogHook und ich vermute, dass an dieser Stelle über ein Hook irgend ein PStringPointer vom Hersteller initialisiert wird in dem dann die ganzen @PJL-Befehle vor dem eigentlichen Printer.BeginDoc stehen. Wenn meine Suche erfolgreich ist poste ich das natürlich, bin jetzt aber noch am suchen wo ich die Initalisierung reinbauen muss. ImKlartext habe ich im PrintFile mit Dialog sowas wie Zitat:
und ohne Dialog aber mit Escape dirkt nach Printer.BeginDoc sowas wie Zitat:
(&%$.. sind dabei natürlich Platzhalter und <ESC> steht für #27) Schlussfolgerung für mich ist daher das Printer.BeginDoc schon einen Elementarstrom an Daten an den Drucker schickt und ich bisher mit meiner Escape-Sequenz soweit zu spät gekommen bin das der Drucker das einfach nicht mehr interpretiert weil es nicht am Anfang steht. Direkt vor Printer.BeginDoc tut Escape(...) ![]() Wenn irgendwo noch eine Idee zu diesem Thema da ist bin ich (geiffer :gruebel: ) gern und willentlich offen, andernfalls ist halt try und ggf. except statt finally angesagt. Insgesamt danke an marabu für den Workaraound, will aber das Problem bewältigen und nicht umschiffen. Gruß, Bernd |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
Sorry, noch was vergessen bzw. Versäumt zu erwähnen:
Zitat:
Gruß, Bernd |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
Liste der Anhänge anzeigen (Anzahl: 1)
wenn es dir nur um die anwenderid geht, die kann bei jedem user explizit gesetzt werden
dazu brauchst du nur in den "druckeinstellungen" die id setzen. |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
Zitat:
Die Daten werden in einem eigenen Printjob übermittelt. ![]() |
Re: Sonderfunktionen eines Drucker ermitteln und setzen?
generic schrieb:
Zitat:
shmia schrieb: Zitat:
Ich suche jetzt nach einer Möglichkeit den Druck ohne einen vorgeschaltenen Dialog in eine Datei zu kriegen und der dann die "@PJL Commands" voran zu setzen. Danach könnte ich dieses File dann im RAW-Format rüber schieben. Bin aber noch nicht weit gekommen weil alle Lösungsansätze die ich finde immer mit der PrnDlgRec schaffen die im Druckdialog aufgebaut wird. Gruß, Bernd |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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