Papiergrösse in Druckschacht abfragen

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

Moderator: Moderatoren

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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 »

Wir haben früher oft die erste Seite vom 2. Schacht (LOGO) geholt und den Rest vom 1. Schacht.
Mit den Laserdruckern hat das unter Clipper und Xbase++ funktioniert.
Man muss nur die Werte manuell abfragen und speichern und natürlich muss immer das richtige Papier im vorgesehenen Schacht eingelegt sein.
Der Drucker kann nicht erkennen ob LOGO oder BLANKO oder Etiketten im Drucker liegen, das muss schon der Mensch richtig bestücken.

Wie das mit den Druckjobs ist müsste ich nachsehen.

Seit langem haben wir nur noch Farblaser oder sehr gute Tintenspritzer, da wird alles inkl. LOGO mit ausgedruckt.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von AUGE_OHR »

hi,
ramses hat geschrieben: Fr, 27. Aug 2021 9:38

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.
zunächst muss ich dazu bemerken das es um einen Netzwerkdrucker ging der nicht an einem PC angeschlossen war.
ein

Code: Alles auswählen

      oDC:Create( cPrinterObjectName ) 
erzeugt nicht immer ein "gültiges" XbpPrinter-Object z.b. wenn der Drucker "Offline" ist
der printerStatus() meldet dabei nicht XBPPRN_STATUS_OFFLINE

IHMO wird der Status des Print-Spooler und nicht vom "ungültigen" XbpPrinter-Object angezeigt

deshalb prüfe ich ob es ein "gültiges" XbpPrinter-Object ist

Code: Alles auswählen

      IF oDC:Create( cPrinter ) == oDC                                // = self
      ELSE
         MSGBOX( "! Drucker ist Offline !" )
         BREAK                                                        // raus
      ENDIF
      nStatus := oDC:PrinterStatus()
Der Printer-Status kann man nur dann geprüft werden wenn der Drucker nicht "Offline" ist

Die Demo XbpPrinter() im Help File ist für "lokale" Drucker ausgelegt die direkt mit dem PC verbunden sind.

Ich habe damals von Novell "Nadel"- Drucker auf Laser mit Schacht umgestellt welcher per "fester" IP frei gegeben wurde
während die Novell Drucker-Queue immer zu erreichen war konnte der Laser in "Sleep" Modus gehen -> Offline
ramses hat geschrieben: Fr, 27. Aug 2021 9:38 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"}}
"Das" sind die Werte die du zuordnen musst :!:
die Konstanten von \XPPW32\Include\xbpdev.ch sind NICHT die "Werte" ...

ich frage es so ab

Code: Alles auswählen

      IF oDC:paperBins() != NIL
         aPB := oDC:paperBins()
         iMax := LEN( aPB )

            // HP P2055dn
            //
            IF "P2050" $ cPrinter                        // HP LaserJet P2050 Series PCL6
               FOR i = 1 TO iMax
                  nDummy := aPB[ i ] [ 1 ]
                  DO CASE
                     CASE nPaperBin == XBPPRN_PAPERBIN_CASETTE
                        IF nDummy == 260                 // das ist der HP2050 Wert 
                           nPaperBin := 260
                           lRaus := .F.
                           EXIT
                        ENDIF
                     CASE nPaperBin == XBPPRN_PAPERBIN_MIDDLE
                        IF nDummy == 261
                           nPaperBin := 261
                           lRaus := .F.
                           EXIT
                        ENDIF
                  ENDCASE
               NEXT
danach rufe ich ein Configure auf und "verbinde" es mit XbpPresspace()

Code: Alles auswählen

      IF nPaperBin > 0
         oDC:setPaperBin( nPaperBin )                                 //  welche Kasette
      ENDIF
      oDC:setNumCopies( nCopies )                                     //  Anzahl Kopien
      oDC:setCollationMode( XBPPRN_COLLATIONMODE_OFF )
      oDC:configure()

      oPS := XBPPRESSPACE() :New()
      oPS:Create( )
      oPS:configure( oDC, oDC:paperSize(), GRA_PU_LOMETRIC )
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Papiergrösse in Druckschacht abfragen

Beitrag von AUGE_OHR »

hi,
Wolfgang Ciriack hat geschrieben: Fr, 27. Aug 2021 12:32 Ich meine, eine Schachtsetzen zwischen :endPage und :StartPage funktioniert.
bei mir ist :endpage auch Ende des Druck-Job

Code: Alles auswählen

   oPrinter := PrinterPS( ... )
   oPrinter:device() :startDoc( cText )

   oPrinter:device() :endDoc()
   DelDevice( oPrinter )
ich habe die "Konfiguration" in PrinterPS wo ich den Schacht, Format usw. jedes mal neu angebe.

---

es kommt wohl noch aus einer Zeit wo Windows / Hardware noch nicht so gut reagierten.

bei dem NEC P60 kam es, trotz Doppel-Einzug und Papier "von unten", immer wieder zu Papier Stau.
dabei ging Drucke, die schon im Drucker RAM waren, verloren wenn man den Drucker ausgeschaltet hat.

seit dem schicke ich immer nur einen Druck-Job ab und prüfe vor dem nächsten ob der Drucker bereit ist

p.s. wenn der Drucker viel RAM hat kann man auch den Drucker-Spooler "abschalten" und der Drucker reagiert schneller
gruss by OHR
Jimmy
Antworten