AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Sonderfunktionen eines Drucker ermitteln und setzen?
Thema durchsuchen
Ansicht
Themen-Optionen

Sonderfunktionen eines Drucker ermitteln und setzen?

Offene Frage von "Xanadu"
Ein Thema von Xanadu · begonnen am 24. Jul 2005 · letzter Beitrag vom 29. Jul 2005
Antwort Antwort
Xanadu

Registriert seit: 8. Mai 2005
Ort: Schwäbisch Gmünd
20 Beiträge
 
Delphi 5 Enterprise
 
#1

Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 24. Jul 2005, 15:54
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 24. Jul 2005, 16:02
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
  Mit Zitat antworten Zitat
Xanadu

Registriert seit: 8. Mai 2005
Ort: Schwäbisch Gmünd
20 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 26. Jul 2005, 19:38
marabu schrieb:
Zitat:
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.
Hallo marabu,

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:
...
Printer.BeginDoc;
Escape(Printer.Handle, PASSTHROUGH, 0, '@PJL SET USERCODE="xy"', nil);
Printer.TextOut('Testdruck');
Printer.EndDoc;
Wenn ich allerdings vorher einen TPrinterSetupDialog ausführe dann funktioniert es.
Delphi-Quellcode:
...
if PrinterSetupDialog.Execute then
begin
  Printer.BeginDoc;
  Printer.TextOut('Testdruck');
  Printer.EndDoc;
end;
Das hilft mir nur nicht weiter da einige Programme zum Druck von Packscheinen und Arbeitspapieren ohne Anwendereingaben drucken müssen.

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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 26. Jul 2005, 21:41
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
  Mit Zitat antworten Zitat
Xanadu

Registriert seit: 8. Mai 2005
Ort: Schwäbisch Gmünd
20 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 26. Jul 2005, 21:49
Hallo marabu,

heissen Dank für den Tip, werde mich da in der Richtung noch schlau machen.

Gruß, Bernd
  Mit Zitat antworten Zitat
Xanadu

Registriert seit: 8. Mai 2005
Ort: Schwäbisch Gmünd
20 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 28. Jul 2005, 00:48
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 Drucken ohne TPrinter, zum Anderen hab ich auch noch was gefunden um ohne PrinterDialog (und PrinterDialog.Options := [poPrintToFile]) etc. DialogLos in eine Datei zu drucken Druck in eine Datei 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:
<ESC>-12345X@PJL SET USERCODE="xy"&%$...
stehen
und ohne Dialog aber mit Escape dirkt nach Printer.BeginDoc sowas wie
Zitat:
&%$..%<ESC>-12345X@PJL SET USERCODE="xy"§$&...
stehen

(&%$.. 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(...) ...Use PASSTHROUGH Escape to Send Data Directly to Printer? noch nicht weil der Drucker(Treiber) bzw. der Spooler noch nicht "Printing" ist. Also kann es nur zwischen vor und direkt nach Printer.BeginDoc liegen. Nachdem da nix ist kann es also nur irgendeine wilde C-Struktur oder Printer.BeginDoc selbst sein.

Wenn irgendwo noch eine Idee zu diesem Thema da ist bin ich (geiffer ) 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
  Mit Zitat antworten Zitat
Xanadu

Registriert seit: 8. Mai 2005
Ort: Schwäbisch Gmünd
20 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 28. Jul 2005, 01:27
Sorry, noch was vergessen bzw. Versäumt zu erwähnen:
Zitat:
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.
Der Drucker kann eigentlich garnicht anders weil er am Anfang des Druckjobs die Zertifizierung brauch. Denke mal und gehe davon aus dass andere @PJL-Commands im Druckjob verarbeitet werden, aber der User sich ganz zu Beginn identifizieren muss weil sonst der Job einfach wegen mangelnder Authentifizierung ge"chancel"´d werden muss.

Gruß, Bernd
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 28. Jul 2005, 09:59
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.
Miniaturansicht angehängter Grafiken
afico_104.jpg  
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 28. Jul 2005, 15:55
Zitat von Xanadu:
Meine Frage nun, wie kann ich derartige Druckerspezifische Funktionen ermitteln und vor allem auch setzen?
Du kannst über den Windows-Spooler auch direkt Roh-Daten an den Drucker senden. (aber nur senden nicht lesen)
Die Daten werden in einem eigenen Printjob übermittelt.
http://community.borland.com/dsp/ftp...e/rawprint.zip
Andreas
  Mit Zitat antworten Zitat
Xanadu

Registriert seit: 8. Mai 2005
Ort: Schwäbisch Gmünd
20 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 29. Jul 2005, 08:40
generic schrieb:
Zitat:
dazu brauchst du nur in den "druckeinstellungen" die id setzen.
Hallo generic, ich hab in den Druckeinstellungen die Anwenderid an zwei Stellen gesetzt. Nur kommen diese Infos nicht rüber wenn ich ohne vorgeschalteten Dialog drucke.

shmia schrieb:
Zitat:
Du kannst über den Windows-Spooler auch direkt Roh-Daten an den Drucker senden. (aber nur senden nicht lesen)
Die Daten werden in einem eigenen Printjob übermittelt.
Hallo shmia, das mit dem zweiten Printjob vereitelt den Erfolg. Der Drucker prüft jeden Printjob einzeln ob er gedruckt werden "darf" oder nicht. Wenn ich nun zuerst die RAW-Daten schick hätten die dann zwar das "Recht", der nachfolgende Druck würde dann aber wieder abgewiesen.

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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 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