Wie bereits im Artikel Drucken mit dem CtxDocEdit angekündigt, wird es in der Version 5.6.06 eine Möglichkeit geben den Inhalt eines CtxDocEdit-Objektes auf einem beliebigen Drucker auszugeben.
Da, wie in dem Artikel beschrieben, an die COM-Eigenschaft PrintDevice
ein Geräte-Kontext übergeben werden muss, haben wir den Befehl WinDocPrint()
implementiert. Der Befehl hat folgenden Funktionskopf:
WinDocPrint(
Object : handle; // Deskriptor des CtxDocEdit-Objektes
opt Pages : alpha; // Seitenauswahl
opt PrtDevice : handle; // Deskriptor eines PrintDevices
opt Copies : int; // Anzahl der Exemplare
) : int; // Fehlercode
Pages – Seitenauswahl mit range(), odd() oder even()
In Pages
kann eine Seitenauswahl angegeben werden. Mit range()
wird ein Bereich oder eine Aufzählung von Seiten gedruckt. Wird Pages
nicht angegeben oder range()
ohne weitere Parameter angegeben, werden alle Seiten des Dokumentes gedruckt.
Beispiele:
'range()' // Alle Seiten drucken
'range(1-10)' // Seiten 1 bis 10 drucken
'range(1,3,5-9)' // Seiten 1, 3 und 5 bis 9 drucken
Mit odd()
können alle ungeraden, oder ein Bereich von ungeraden Seiten gedruckt werden.
Beispiele:
'odd()' // Alle ungeraden Seiten drucken
'odd(1,10)' // Alle ungeraden Seiten im Bereich 1 bis 10 drucken
Mit even()
können alle geraden Seiten oder ein Bereich von geraden Seiten gedruckt werden.
Beispiele:
'even()' // Alle geraden Seiten drucken
'even(1,10)' // Alle geraden Seiten im Bereich 1 bis 10 drucken
PrtDevice – CONZEPT 16 PrintDevice-Objekt
Im Parameter PrtDevice
kann der Deskriptor eines mit PrtDeviceOpen()
geöffneten PrintDevice-Objektes übergeben werden, um den Zieldrucker zu definieren. Wird kein PrintDevice angegeben, erfolgt die Ausgabe auf dem Standarddrucker.
Copies – Anzahl der Exemplare
Mit diesem Parameter kann die Anzahl der zu druckenden Exemplare definiert werden. Ist dieser Parameter nicht angegeben, wird die Eigenschaft ppCopies
des PrintDevice-Objektes ausgelesen. Ist hingegen kein PrintDevice-Objekt definiert, wird ein Exemplar gedruckt. Die Anzahl der Exemplare kann daher auch über den Drucker-Auswahldialog (WinOpen(_WinComPrint)
) gesetzt werden.
Beim Druck von mehreren Exemplaren kann über die Eigenschaft ppCollate
des PrintDevice-Objektes definiert werden, ob die Exemplare sortiert werden (alle Seiten eines Exemplars am Stück), oder nicht (alle Exemplare einer Seite am Stück).
Der Aufruf des Befehls kann beispielsweise wie folgt aussehen:
$ctxDocEdit->WinDocPrint('range(1-5,7,9)', tPrtDevice, 2);
3 Antworten
@Daniel:
Nein nicht nötig, es geht eher darum Aufzählung und Bereich zu mischen. Aber das lässt sich ja leicht selbst implementieren.
@tsauter:
Die Formatierung ist an die bestehenden Eigenschaften ppSelectPrt, und ppSelectPvw des Druckprozessors angelehnt. Mit odd() und even() kann nur ein Bereich angegeben werden. Der Minimalwert dieses Bereichs wird mit Komma vom Maximalwert getrennt.
Bei range() können mehrere Werte und auch Bereiche angegeben werden. Daher ist es bei range wichtig zu unterscheiden, ob nur eine einzelne Seite, oder ein Bereich von Seiten angesprochen werden soll.
Wenn es für Sie relevant ist, können wir bei odd() und even() zusätzlich die Form odd(1-10) implementieren.
Sehr gut! Noch eine Frage: in range() wird eine Bereich mit 1-10 angegeben, in odd() und even() mit 1,10? Oder ist das da auch eine Aufzählung?