Papiergrösse in Druckschacht abfragen

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Hallo zusammen

die Ansteuerung und Abfrage der verfügbaren Druckschächten funktionert sehr gut. Auch die auf dem Drucker verfügbaren Formate können mit :forms abgefragt werden.

Bis anhin haben wir die Druckschachtansteuerung manuell gepflegt und in einer Datenbank angelegt.

Nun soll das Programm die in den Druckschächten verfügbare Papiergrösse abfragen und den passenden Druckschacht (paperbin) feststellen und verwenden. (Die Automatische Auswahl nach Papiergrösse ist nicht möglich. Es muss der Druckschacht angesteuert werden)

Hier ist das Problem: Wie lässt sich aus xbase die in einem Druckschacht vorhandene bezw. vorgegebene Papiergrösse eines Druckers abfragen?
Valar Morghulis

Gruss Carlo
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von Herbert »

Die berühmten ESC-Sequenzen, da sind aber bessere Experten als ich hier im Forum --> Hubert?
Oder schau mal, ob über die Powershell mit dem Befehl Get-Printer oder Get-PrinterConfiguration etwas zurück bekommst.

Mühsam wirds allemal.
Grüsse Herbert
Immer in Bewegung...
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Hallo Hubert

Da hast du recht. Mühsam ist es.
Die berühmten ESC-Sequenzen lassen sich unter einem Windows-Druckertreiber nicht mehr benutzen. Die sind schon lange ausgestorben. (Leider)
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von brandelh »

Das ist HERBERT ;-)

Ich bin Hubert ... soweit ich das weiß, sind die HBPrinter() Sachen alle generisch (macht ja auch keinen Sinn seine Anwendung auf genau einen Drucker zu schreiben).

Aber es muss in der API des Druckertreibers schon die Info geben, wird ja auch angezeigt.

Method XbpPrinter():forms() - könnte eventuell solche Infos abfragen.
Method XbpPrinter():paperBins() - manchmal kann man am Schacht erkennen, was drin sein kann, aber meist ist wohl immer A4 als Rückgabewert.
Method XbpPrinter():paperSize() - man könnte eventuell die Schächte zuweisen und die Größe abfragen.
Method XbpPrinter():setupDialog() - hiermit kann man den Anwender den Schacht bestimmen lassen.

Wir haben es auch schon gemacht, mehrere Windows Druckerelemente (XYZ mit Farbe, XYZ mit Graustufen, XYZ Mehrseitendruck, XYZ Einseitendruck) für einen Drucker zu erstellen und jeweils die gewünschten Einstellungen vorzugeben.
Was immer geht, wenn man das richtige PaperBIN einmal manuell abfragen und speichern kann (die ID), dann kann man dieses auch immer wieder ansteuern.

Ist aber alles lange her :D
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Hubert, Entschuldige die Namensverwechslung.....

Es gibt in der API des Druckertreibers schon einige Angaben. Etwa die welche xbase mit den von die erwähnten Angaben auch anzeigen kann.
Leider ist die Papiergrösse immer A4 egal was du machst.
Wir haben es auch schon gemacht, mehrere Windows Druckerelemente (XYZ mit Farbe, XYZ mit Graustufen, XYZ Mehrseitendruck, XYZ Einseitendruck) für einen Drucker zu erstellen und jeweils die gewünschten Einstellungen vorzugeben.
Das funktionert seit einiger Zeit nicht mehr. Das hatten wir früher auch mal. Wenn du jetzt hintereinander OHNE Pause zwischen den Druckjobs, Jobs auf solche Elemente absetzt die über den selben Treiber laufen greift Windows ein optimiert und gibt alle Jobs mit den zuerst benutzten Einstellungen aus.

Was immer geht, wenn man das richtige PaperBIN einmal manuell abfragen und speichern kann (die ID), dann kann man dieses auch immer wieder ansteuern.
Das Problem ist dass sich diese ID öfters ändern, etwa wenn ein anderer Drucker mit altem Namen installiert wird oder auch schon bei Treiberupdates oder wenn noch nichts erfasst wurde dann kommt es Regelmässig zum Chaos.

Wr möchten jetzt die Schächte des Druckers Abfragen und je nach den vorhandenen Papiergrössen z.B. A3, A4, A4, A5 auch den Ausdruck steuern.
z.B. wenn ein Drucker nur 1 A4 Fach hat muss Logo gedruckt werden, sind 2 Fächer vorhanden ist das erste mit Logo das zweite ohne Logo usw. usw.

Die Logik der Bestückung wäre bei gleichen Papiergrössen immer die selbe.

Bei allen HP Drucker gibt es mit dem Universal-Druckertreiber einen Registry Eintrag der die gewünschten Angaben enthält:

Code: Alles auswählen

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\HPLaserMFP-M725\TrayFormTable 
Es wird auch schon überlegt alle anderen Drucker zu ersetzten ....
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von AUGE_OHR »

hi,

"was" in einem "Paperbin" liegt kann man IHMO nicht bestimmen ... das kommt darauf an "was" der User in den "Schacht" legt.
man kann zwar bestimmen für welches Format der Drucker "default" konfiguriert wurde aber nicht ob das Papier dem Format entspricht

bei den HP-Drucker war das "Problem" das man die "Nummer" der Schächte finden musste denn die stimmen nicht mit den "default" Werten
hierzu war es notwendig die "Original HP" Treiber zu installieren die dann die Werte lieferte

---

Frage : wie fragst du ab "ob" sich überhaupt Papier im Schacht befindet :?:

üblicherweise kommt man nur bis zum Druck-Spooler und der ist immer "online"
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Hallo Jimmy

es geht darum dass der Drucker nur an einem Ort konfiguriert werden muss. Also unter Windows. Ohne dies lassen sich die Druckschächte auch nicht verwenden. Es soll die Anordnung und die Vorhandenen (eingestellten) Formate vom Treiber übernommen werden.

Das richtige Format in die Passende Schublade zu legen ist Sache des Nutzers, es geht nicht darum zu kontrollieren ob er das richtige Papier eingelegt hat sondern was vorhanden sein soll.
Frage : wie fragst du ab "ob" sich überhaupt Papier im Schacht befindet
Gar nicht. Wenn es fehlt zeigt der Drucker "Fehler" im Display und bleibt stehen.
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von AUGE_OHR »

ramses hat geschrieben: Di, 24. Aug 2021 8:49
Frage : wie fragst du ab "ob" sich überhaupt Papier im Schacht befindet
Gar nicht. Wenn es fehlt zeigt der Drucker "Fehler" im Display und bleibt stehen.
rennst du dann zum Drucker um nachzusehen :?:
... es ist ja nicht so das es gar nicht geht ... man muss nur wissen "wie"
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

AUGE_OHR hat geschrieben: Di, 24. Aug 2021 18:17 ... es ist ja nicht so das es gar nicht geht ... man muss nur wissen "wie"
Das ist in der Tat nicht so ohne weiteres oder einfach möglich. Jedenfalls habe ich noch keine einfache Variante gefunden.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von Jan »

Carlo,

Jimmy weiß sowas immer. Aber er erhöht auch gerne mal die Spannung, macht erstmal nur unklare Andeutungen, um dann später mit der Lösung raus zu rücken.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Hallo Jan

das hat schon was. Es ist genau so wie du schreibst.

In diesem Fall gibt es jedoch gar keine praktikable Lösung. Ich habe schon einiges versucht aber alles führte immer nur zur Verwirrungen des Personals. Füllt z.B. ein User Papier nach wärend ein anderer gleichzeitig Drucken will bekommt dieser eine Fehlermeldung, wenn er dann nachschaut ist das Papier vorhanden. Chaos um nichts.

Hat der Drucker selbst noch einen Spooler der aktiviert ist gibt es, solange der Drucker eingeschaltet ist, überhaupt keine Fehlermeldungen die abgefragt werden können. Da hilft dann nur der Blick auf das Display oder die Web-Oberfläche des Druckers.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von Jan »

Carlo,

es gibt einen Weg wie man Drucker-Zustände auslesen kann, u. a. per SNMP (den anderen hab ich gerade nicht greifbar). Ich hatte das mal ausprobiert (zugegebener Maßen aber nicht sehr intensiv), hatte das aber nicht hinbekommen. Vielleicht weiß Jimmy da ja mehr.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Hallo Jan

Danke. Die Idee ist nicht schlecht. Das würde anzeigen was und wieviel im Drucker ist resp. wie das Fach eingestellt ist.
Muss mal nachdenken und nachschauen ob dies die Lösung ist, es zeigt dann noch nicht was auf dem Server konfiguriert ist.

Mit snmp habe ich (nicht mit Druckern) schon einiges gemacht. Das nervige dabei ist die Infos zu den Schlüsseln zu bekommen damit sich die Werte auch nutzen lassen. Abfragen der Daten geht mit snmpwalk und einem Shell Aufruf sehr einfach. Benötigst du Infos dazu?
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von AUGE_OHR »

hi

@Jan :
wenn man meine Threads nicht liesst weiss man nicht die Lösung

@Ramses
Paperbin / configure() ...
12. Juni 2002

das Thema hatte ich vor fast 20 Jahren angesprochen ... aber da warst du noch nicht "dabei"

is :paperbin online ?
23. Mai 2005

da kam ich zur Lösung das es am "DC" liegt
man kann es "direct" mit Xbase++ machen und braucht dazu keine "Tricks"
man muss nur "verstehen" das ein "Presspace" eben kein "DC" ( Device Context ) ist und man das Drucker Object mit dem "DC" verknüpfen muss.
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

AUGE_OHR hat geschrieben: Mi, 25. Aug 2021 18:37 da kam ich zur Lösung das es am "DC" liegt
man kann es "direct" mit Xbase++ machen und braucht dazu keine "Tricks"
man muss nur "verstehen" das ein "Presspace" eben kein "DC" ( Device Context ) ist und man das Drucker Object mit dem "DC" verknüpfen muss.
Hallo Jimmy

das ist so nicht ganz richtig. Man muss nur "verstehen" wie Windows mit dem Drucker umgeht.

Es gibt eine grundlegende Voraussetzung, die erfüllt sein muss, um den Zustand eines physischen Druckers zu bestimmen: Der Spooler muss versuchen, einen Druckauftrag an den physischen Drucker zu senden. Dies ist das einzige Mal, bei welchem der Zustand des Druckers vom Portmonitor gemeldet wird.
Wenn die Druckerwarteschlange leer ist wird angenommen, dass der Drucker bereit für die Annahme von Druckaufträgen ist. Dies ist eine gültige Annahme, auch wenn sich der physische Drucker in einem Fehlerzustand befindet, z. B. offline. Das Betriebssystem betrachtet den Drucker als bereit, Druckaufträge zu akzeptieren, auch wenn die Zustellung an den physischen Drucker aus irgendeinem Grund nicht abgeschlossen werden kann. Ein solcher Fall wird als Fehlerstatus im Betriebssystem betrachtet, der vom Benutzer behoben werden muss. Es wird nicht als Fehler betrachtet, der für die Anwendung gemeldet werden kann, die die Warteschlange des Druckauftrags erfolgreich abschließen kann.

Quelle: Microsoft DOCS
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Guten Mrogen

eine erste Funktionierende Lösung zur Abfrage von vorhandenem Schacht mit Papierformat habe ich inzwischen erarbeitet. Die ersten Tests mit einigen Druckern waren erfolgreich.

Wenn es jemand brauchen kann, hier meine aktuelle Lösung:

Code: Alles auswählen

             oDrucker := XbpPrinter():New()
             oDrucker:create()
             cStandardDrucker := oDrucker:devName   // standarddrucker
             aBins :=  oDrucker:paperbins()
             getRealTrayArray( cStandardDrucker, aBins, "A5", "test.txt"  )
             oDrucker:destroy()



function getRealTrayArray( cDruckerName, aBins, cForm, cLogFilename   )
local oReg, cBuffer, n, c
local ret_val := {}, arr := {}, arrTray := {}
local t := ""


      default cForm to "A4", cLogFilename to ""

      if !empty( cLogFileName )
         t +=  chr(13) + chr(10)
         t += "**** getRealTrayArray() * " + dtoc(date()) +  " - " + time() + chr(13) + chr(10)
         t += "Druckername: " + cDruckerName +  chr(13) + chr(10)
         t += "PaperBins  : " + var2char( aBins ) + chr(13) + chr(10)
         t += "G. Format  : " + iif(empty(cForm), "ALLE", cForm ) + chr(13) + chr(10)
      endif

      oReg := XbpReg():NEW( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\" + cDruckerName +"\PrinterDriverData" )


      if  oReg:Status()
           oReg:ReadBinType( "C" )  //  Rckgabe als Char  //  XbpReg  Klasse mit Erg„nzung fr  Datatyp   REG_MULTI_SZ  erforderlich

           cBuffer := oReg:GetValue( "TrayFormTable")

           if cBuffer != nil .and. valtype(cBuffer) = "C"
                n := c := 1
                arr := {}
                do while n < len(cBuffer) .and. c > 0
                  c := at(chr(0),cBuffer, n )
                  aadd(arr,  substr( cBuffer, n, c-n ) )
                  n := c+1
                  if len(arr) = 3
                     aadd( arrTray, arr )
                     arr := {}
                  endif
                enddo
           endif
           if len(arrTray) < 1
              t += "**FEHLER: Key TrayFormTable in PrinterDriverData ist leer oder konnte nicht gelesen werden" + chr(13) + chr(10)
           endif
           for i = len(arrTray) to 1 step -1
              n := ascan( aBins, {|x|alltrim(x[2]) == arrTray[i,1] .and.  arrTray[i,2] != "0" .and. ( empty(cForm) .or. arrTray[i,2] == cForm ) })
              if n != 0
                  aadd( ret_val, { aBins[n,1], aBins[n,2], arrTray[i,2] } )
              endif
           next

   else
     t += "**FEHLER: PrinterDriverData kann nicht gelesen werden" + chr(13) + chr(10)
   endif

   if !empty( cLogFileName )
     t += "Ret_Val    : " + var2char( ret_val ) +  chr(13)+chr(10)
     strfile( t, cLogFilename, .t. )
   endif


return(ret_val)

Code: Alles auswählen

**** getRealTrayArray() * 26.08.2021 - 07:53:02
Druckername: Einkauf HP-MFP6
PaperBins  : {{15, " Automatisch ausw„hlen"}, {257, " Drucker autom. Auswahl"}, {258, " Manuelle Zufuhr"}, {259, " Fach 1"}, {260, " Fach 2"}, {261, " Fach 3"}, {262, " Fach 4"}, {263, " Fach 5"}, {1285, "Nicht bestimmt"}, {1284, "Normal"}, {1513, "HP LaserJet 90 g"}, {1276, "Leicht 60-74g"}, {1514, "Mittelschwer 85-95 g"}, {1279, "Briefpapier"}, {1278, "Recyclingpapier"}, {1515, "HP Color Laser 105 g, m"}, {1516, "HP Premium Choice 120 g"}, {1518, "HP Pr„sentationspapier "}, {1519, "HP Professional 120g, s"}, {1520, "HP Premium Pr„sentation"}, {1257, "Mittleres Gewicht 96-11"}, {1275, "Schwer 111-130g"}, {1271, "Mittleres Gewicht 96-11"}, {1270, "Hochgl„nzend, schwer 11"}, {1523, "HP Broschrenpapier, ma"}, {1525, "HP Broschrenpapier, ho"}, {1274, "Sehr schwer 131-175g"}, {1269, "Hochgl„nzend, sehr schw"}, {1530, "HP Deckblattpapier 200 "}, {1531, "HP Fotopapier, matt 200"}, {1533, "HP Broschrenpapier, ho"}, {1273, "Karton 176-220 g"}, {1272, "Karte 176-220 g, hochgl"}, {1537, "Color Laser-Transparent"}, {1280, "Etiketten"}, {1282, "Briefkopf"}, {1267, "Briefumschlag"}, {1283, "Vorgedruckt"}, {1281, "Vorgelocht"}, {1277, "Farbig"}, {1540, "Rau"}, {1542, "Folie, opak"}}
G. Format  : A5
Ret_Val    : {{263, " Fach 5", "A5"}}
Weitere Tests mit unterschiedlichen Druckertypen stehen heute noch an.
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von brandelh »

Bei all den Überlegungen ist es natürlich schon wichtig, dass auch die Anwender sich an die Regeln halten, bei uns galt:

Fach 1 = A4 blanko
Fach 2 = A4 Logo (falls überhaupt ein 2. da war)
Fach 3 = A3 Papier (nur wenige haben den)
Universaleinzug ... Hier kann man Etiketten etc. für manuelles Drucken einlegen

klar dass man nicht einfach mal so ein anderes Papier in A4 einlegen darf nur weil man was anderes Drucken will, dafür haben wenige lokale Drucker.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von Jan »

Hubert,

was Du da mit mit Fach 1und 2 beschreibst läßt sich natürlich nie auslesen. Dazu müssten die Fächer ja jeweils einen eingebauten Scanner haben. Ähnlich wäre das ob da das 80- oder das 120-gr-Papier drin liegt, da würde nur eine Dickenmessung helfen. Aber ob da DIN A 4quer oder hoch drin ist, oder DIN A 3, das müsste man auslesen können. Wobei mir das auch egal ist. Schicke ich was mit A4, dann schiebt der Drucker das von ganz alleine auf den Schacht, wo das passende Papier drin liegt, da muß ich mich selber heutzutage um gar nichts mehr kümmern.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Jan hat geschrieben: Do, 26. Aug 2021 16:45 Schicke ich was mit A4, dann schiebt der Drucker das von ganz alleine auf den Schacht, wo das passende Papier drin liegt, da muß ich mich selber heutzutage um gar nichts mehr kümmern.
Das geht doch aber nur wenn du nur 1 Schacht mit A4 bestückt hast. Oder sehe ich was nicht?

z.B.
Fach 1 A4 Varia (Etti usw.)
Fach 2 A4 gelb
Fach 3 A4 weiss
Fach 4 A4 mit Logo
Fach 5 A5 weiss

Wie machst du dass das gewünschte Papier verwendet wird?
(einige Seiten Fach 2, einige Seiten Fach 3, einige Seiten Fach 4)
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von Jan »

Carlo,

genau das hatte ich doch geschrieben. Papierformat kann man auslesen, Papiergewicht, mit oder ohne Logo, oder Farbe nicht.

Und um das Papierformat kümmert der Drucker sich alleine, weil der ja weiß welche Größe in welchem Fach liegt. Da muß ich selber gar nichts machen in der Programmierung. Farbe etc. kann man höchstens durch Bennung der Fächer regeln, aber Fachnamen kann man auch per XbpPrinter auslesen, und dann den Druckjob passend schicken.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Jan hat geschrieben: Do, 26. Aug 2021 20:41
Und um das Papierformat kümmert der Drucker sich alleine, weil der ja weiß welche Größe in welchem Fach liegt. Da muß ich selber gar nichts machen in der Programmierung.
Hallo Jan

jetzt habe ich einen hänger.

Wie gar nichts machen? Wenn ich je nach Drucker z.B. 2, 3, 4 Fächer die auf A4 gestellt sind habe.
Wie machst du denn das dass der Drucker bei 4 vorhandenen Fächer das gewünschte Papier z.B. Fach 4 mit Logo nimmt ohne die Fachauswahl per Programm?

( Die Reihenfolge der Papiersorten ist bei gleicher Anzahl A4 Fächer immer gleich.)
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von AUGE_OHR »

hi,
ramses hat geschrieben: Do, 26. Aug 2021 8:35 Quelle: Microsoft DOCS
was M$ "sagt" ist eine Sache ... wie es bei Xbase++ umgesetzt wurde eine andere.

um es kurz zu machen : mit dem Trick funktioniert es wie auch AGP eingestehen musste ...
29. Januar 2008
public.xbase++.generic
xbpprinter printerstatus

Code: Alles auswählen

      IF oDC:Create( cPrinter ) == oDC                                // = self
ramses hat geschrieben: Do, 26. Aug 2021 8:35 Wie machst du denn das dass der Drucker bei 4 vorhandenen Fächer das gewünschte Papier z.B. Fach 4 mit Logo nimmt ohne die Fachauswahl per Programm?

Code: Alles auswählen

      DO CASE
         CASE nPaperBin = 1
            oPrinter := PrinterPS( NIL, nCopies, XBPPRN_PAPERBIN_CASETTE )                                // normal weiss
         CASE nPaperBin = 2
            oPrinter := PrinterPS( NIL, nCopies, XBPPRN_PAPERBIN_MIDDLE )                                  // untere "gelb"
         OTHERWISE
            oPrinter := PrinterPS( NIL, nCopies, XBPPRN_PAPERBIN_AUTO )
      ENDCASE
die Xbase++ Konstante muss man mit den Herstellerwerten abgleichen
bei mir standen die nach Installation des Hersteller-Treiber UND des Zusatz-Schacht zur verfügung

IHMO nicht möglich während "eines" Druck-Job den Drucker-Schacht zu wechseln.
ich schicke einzelne Druck-JOB auf jeden Schacht die verschiedene Formate haben können und prüfe "ob Papier" vorhanden ist
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von Jan »

Carlo,

ich hatte doch jetzt mehrfach den Gedanken von Hubert aufgegriffen, das der Drucker das Papierformat hergeben kann. Aber nicht die Farbe des Papiers, das Gewicht, oder ob mit oder ohne Logo.

Wenn Du aber weißt in welchem Fach sich welches Papier befindet, kannst Du das beim Ausdruck ja per :setPaperBin() festlegen. Ich habe das noch nie gemacht weil weder meine Kunden noch ich unterschiedliche Papiere in gleichen Seitenformaten nutzen (Logo etc. werden vom Ausdruck mitgeliefert, es gibt keine vorgedruckten Papiere mehr). Aber lt. Doku sollte das gehen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von ramses »

Guten Morgen

Danke für die Antworten.

@Jimmy

mit

Code: Alles auswählen

      IF oDC:Create( cPrinter ) == oDC                                // = self
habe ich jetzt noch getestet. Es gibt immer .t. egal welcher Zustand der Drucker tatsächlich hat.
Erst nach dem Absetzen eines Druckjobs auf der gleichen WS ergibt :PrinterStatus() z.B. den Wert -3 (Kein Papier)
Die Druckjobs werden jedoch weiterhin problemlos angenommen und und in den Spooler gestellt und nach auffüllen von Papier auch problemlos gedruckt. Es funktioniert genau so wie MS dokumentiert.

Auch die Schachtauswahl funktioniert nicht so wie du vorschlägst. Schau mal was :PaperBin() meldet:

PaperBins : {{15, " Automatisch ausw„hlen"}, {257, " Drucker autom. Auswahl"}, {258, " Manuelle Zufuhr"}, {259, " Fach 1"}, {260, " Fach 2"}, {261, " Fach 3"}, {262, " Fach 4"}, {263, " Fach 5"}, {1285, "Nicht bestimmt"}, {1284, "Normal"}, {1513, "HP LaserJet 90 g"}, {1276, "Leicht 60-74g"}, {1514, "Mittelschwer 85-95 g"}, {1279, "Briefpapier"}, {1278, "Recyclingpapier"}, {1515, "HP Color Laser 105 g, m"}, {1516, "HP Premium Choice 120 g"}, {1518, "HP Pr„sentationspapier "}, {1519, "HP Professional 120g, s"}, {1520, "HP Premium Pr„sentation"}, {1257, "Mittleres Gewicht 96-11"}, {1275, "Schwer 111-130g"}, {1271, "Mittleres Gewicht 96-11"}, {1270, "Hochgl„nzend, schwer 11"}, {1523, "HP Broschrenpapier, ma"}, {1525, "HP Broschrenpapier, ho"}, {1274, "Sehr schwer 131-175g"}, {1269, "Hochgl„nzend, sehr schw"}, {1530, "HP Deckblattpapier 200 "}, {1531, "HP Fotopapier, matt 200"}, {1533, "HP Broschrenpapier, ho"}, {1273, "Karton 176-220 g"}, {1272, "Karte 176-220 g, hochgl"}, {1537, "Color Laser-Transparent"}, {1280, "Etiketten"}, {1282, "Briefkopf"}, {1267, "Briefumschlag"}, {1283, "Vorgedruckt"}, {1281, "Vorgelocht"}, {1277, "Farbig"}, {1540, "Rau"}, {1542, "Folie, opak"}}


@Jan

Jetzt verstehe ich.
Ja der Drucker gibt alle Formate her die zum Drucken unterstützt würden jedoch nicht welche aktuell vorhanden sind und benutzt werden können. Weil ich mehrere gleiche A4 Fächer habe muss ich vor der Druckausgabe wissen wieviele dann weiss ich was ich ausgeben muss. Ist z.b. nur 1 A4 Fach vorhanden muss auch das Logo gedruckt werden oder ist kein A5 vorhanden muss für einen bestimmten Druck eine andere Darstellung und A4 genutzt werden. Das kann nicht einfach dem Drucker gesendet werden ohne zu wissen: Hat er das bestimmte Papier tatsächlich.. Die letzten Jahre haben wir im Programm für jeden Drucker festgelegt was vorhanden ist und aus welchen Fach was gedruckt wird. Das hat auch funktoniert. Nun soll dieser Schritt entfernt und die Config des Druckers unter Windows abgefragt und genutzt werden.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Papiergrösse in Druckschacht abfragen

Beitrag von Wolfgang Ciriack »

IHMO nicht möglich während "eines" Druck-Job den Drucker-Schacht zu wechseln.
Ich meine, eine Schachtsetzen zwischen :endPage und :StartPage funktioniert.
Viele Grüße
Wolfgang
Antworten