Seite 1 von 1

Frage zu SetDuplexMode

Verfasst: Mo, 19. Jan 2015 10:28
von mini990
Hallo,
Folgende Eigenheit ist mir aufgefallen
ich nutze Druckerobjekt:SetDuplexMode( XBPPRN_DUPLEXMODE_BOOK )
Funktioniert auch einwandfrei bei mehrseitigen Drucken.
Was mir nicht gefällt:
Das Blatt wird auch bei einem einseitigen Druckauftrag nochmal eingezogen.
Kann man das abstellen?
Problem: Ich weiß vor Startdoc() nicht wie viele Seiten das Dokument haben wird.

Gruß Stefan

Re: Frage zu SetDuplexMode

Verfasst: Mo, 19. Jan 2015 11:19
von brandelh
Der Drucker auch nicht ;-)

Du könntest die Datenermittlung durchlaufen ohne zu drucken und die Anzahl der Seiten ermitteln.

Eventuell kann man dem Drucker auch einstellen "leere Seiten" nicht zu drucken, eventuell erkennt er dann vor dem Einziehen, dass es eine leere Seite wird.

Re: Frage zu SetDuplexMode

Verfasst: Mo, 19. Jan 2015 12:04
von Herbert
mini990 hat geschrieben:Problem: Ich weiß vor Startdoc() nicht wie viele Seiten das Dokument haben wird.
Ich würde nicht ein zweimaliges Durchlaufen des Erstellens vornehmen.
Versuche vor dem Druckbefehl zu bestimmen, ob bloss wenig Daten entstehen werden. Entsprechend für diesen Fall den Duplex-Modus ausschalten.

Re: Frage zu SetDuplexMode

Verfasst: Mo, 19. Jan 2015 12:12
von brandelh
Die Daten vorab in Arrays zu sammeln und "in einem Rutsch" zu drucken hätte noch den Vorteil bei sehr vielen Treffern eine Sicherungsabfrage einzubauen ...

Re: Frage zu SetDuplexMode

Verfasst: Mo, 19. Jan 2015 21:17
von AUGE_OHR
mini990 hat geschrieben:Das Blatt wird auch bei einem einseitigen Druckauftrag nochmal eingezogen.
Kann man das abstellen?
siehe dir mal das Beispiel zu XbpPrinter() im Xbase++ Help File an.

ein Drucker behält nun seine (Vor-) Einstellung so lange bis er "gelöscht" ( oDC:destroy() ) wird.
XbpPrinter(), XbpFont() und XbpBitmap() Objecte sollte man IMHO immer explizit löschen um keine "Memory" Leaks zu produzieren
mini990 hat geschrieben:Problem: Ich weiß vor Startdoc() nicht wie viele Seiten das Dokument haben wird.
du machst einen Denkfehler da dir der "Presentation-Space" nicht klar ist.

Code: Alles auswählen

FUNCTION PrinterPS( cPrinterObjectName )
LOCAL oPS, oDC := XbpPrinter():New() 
   ... 
   oPS   := XbpPresSpace():New() 
   oPS:Create( oDC, aSize, GRA_PU_LOMETRIC ) 
RETURN oPS    

FUNCTION Drucke() 
   oPS := PrinterPS()
   oPS:device():startDoc() 
   ...
   GRA*(oPS, ... )
   ...
   oPS:device():endDoc()
alles was du mit GRA* Function "malst" passiert ja im oPS "Presentation-Space". der Drucker ist lediglich ein möglicher "Device-Context" für eine Ausgabe.

wie du im Beispiel c:\ALASKA\XPPW32\Source\samples\basics\Printer\PrintOut.prg im Preview siehst kannst du den Druck-Auftrag an jeden installierten Drucker schicken,
der sich dann um den Duplex-Druck kümmern muss WENN du mehr als 1 Seite im "Presentation-Space" hast.

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 7:44
von Herbert
Jimmy, den Duplex-Modus musst du vor dem Startdoc setzen. Deshalb muss vorher die mögliche Seitenzahl>1 bestimmt werden.

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 8:34
von brandelh
Im Hinblick auf mögliche SQL Erweiterungen sollte man heute eh nicht mehr wärend dem Suchlauf direkt drucken, denn das kann man dann gleich wieder in die Tonne treten wenn man auf SQL umsteigt.
Besser ist es die Datensammlung von der Ausgabe zu trennen, und dann hat man auch keine Probleme vorher zu ermitteln wieviele Datensätze gefunden wurden.
Insbesondere spart man sich 2 Suchläufe wenn man auch noch eine Vorschau will ;-)

Als Zwischenspeicher habe ich immer 2 dimensionale Arrays verwendet, ab 2.0 kann man auch ein normales Array mit DataObjects nutzen.
Bei einer Umstellung auf SQL wird dann nur die Erstellung des Arrays anders sein oder man verwendet gleich das Resultset.

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 8:42
von Martin Altmann
Hmm,
ich habe noch keinen Duplexdrucker gesehen, der eine Seite zweimal durchzieht, wenn der Duplexmodus eingestellt, aber nur eine (Vorder)seite zu bedrucken ist!
Was anderes ist es natürlich, wenn man am Ende der ersten Seite in dem Fall unnötigerweise eine neue Seite beginnt, um sie gleich wieder zu beenden! Dann würde aber im Nicht-Duplexmodus nach der bedruckten Seite eine leere Seite herauskommen!
Ansonsten zieht ein Duplexdrucker i.A. die Seite ein, bedruckt die Vorderseite und schmeisst sie aus - gewendet wird dann nicht.

Viele Grüße,
Martin

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 9:09
von brandelh
Mein HP 8600 Bürofarbspritzer zieht das Blatt erneut ein und wendet es, auch wenn ich nur eine Seite ausdrucke (aktuelle Seite drucken) und Dublex aktiviere.
Mein Canon iP 7200 macht das nicht, er druckt nur die eine Seite und wirft dann gleich aus.

Allerdings kann auch ein Seitenvorschub zu viel eine neue Seite erzwingen:

Code: Alles auswählen

:newPage() --> self
// keine Druckdaten oder leere Zeilen ...
:endDoc() --> self
so wird immer eine leere Seite nachgeschoben !
vor :newPage() muss man also prüfen, ob es übernaupt noch was zu drucken gibt !

PS: bei meinen früheren Laserdruckern gab es eine Option "Leere Seiten unterdrücken", die finde ich bei meinen aktuellen Geräten nicht mehr.

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 9:11
von Martin Altmann
Mein Reden :!:

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 10:24
von mini990
Dieses Phänomen tritt hier bei meinem HP OfficeJet 6700 auf.
Bei einem OKI B720 mit Duplexeinheit macht er es nicht.....
Lustige Welt....

Gruß Stefan

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 10:32
von brandelh
Wie geschrieben, auch mein HP OfficeJet PRO 8600 zieht immer ein und dreht das Blatt, sobald Dublex eingeschaltet ist.

Meiner hat einen Netzwerkanschluß und USB, beim Netzwerkzugriff legt er immer nach einer halben Seite einige Sekunden Wartezeit ein,
obwohl die Druckdaten keine Bilder enthalten und mit 100 MBit auch schnell übertragen sein müssten. Mit USB ist er sofort fertig.

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 11:00
von Martin Altmann
Den Druckertreiber hat wahrscheinlich ein Erstsemester-Informatiker programmiert :badgrin:

Viele Grüße,
Martin

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 13:15
von mini990
mein 6700 hängt auch am Netz. Geschwindigkeitsprobleme treten hier jedoch auch bei
großen Dateien bzw. Bildern nicht auf.....

Gruß Stefan

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 14:38
von Tom
Ich meine, mich an einen Duplexdrucker zu erinnern, der zuerst immer die Rückseite gedruckt hat. War ein Kyocera oder so. Selbst im Simplex-Modus :wink: hat er die Seite zweimal eingezogen.

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 15:14
von Wolfgang Ciriack
Tja, bei allen 3 Monaten ein neues Druckermodel bleibt wenig Zeit, vernünftige Druckertreiber zu entwickeln...

Re: Frage zu SetDuplexMode

Verfasst: Di, 20. Jan 2015 16:13
von brandelh
Das ist natürlich auch eine Frage der Sortierung, wenn man 3 Seiten auf Dublex druckt und die letzte wird nicht wieder eingezogen,
dann würde die in der falschen Richtung auf dem Stapel liegen. Das wäre uns dann ja auch nicht Recht ;-)

Re: Frage zu SetDuplexMode

Verfasst: Mi, 21. Jan 2015 12:03
von AUGE_OHR
Herbert hat geschrieben:Jimmy, den Duplex-Modus musst du vor dem Startdoc setzen.
Deshalb muss vorher die mögliche Seitenzahl>1 bestimmt werden.
wieso ?

ich kann doch VOR dem o:Startdoc meinen Presspace füllen z.b. für ein Preview und durch die Druckerauswahl
jederzeit den Device-Context wechseln und dann den evtl. Duplex-Modus berücksichtigen.