Je nach Druckauftrag besteht die Notwendigkeit, die Ausgabe auf verschiedene Druckerschächte vorzunehmen. So kann es zum Beispiel gewünscht sein, dass lediglich die erste Seite eines Dokumentes auf das Firmenpapier mit Logo gedruckt wird oder die Kopie auf ein Papier mit geringerer Qualität.
Das setzt zum einen voraus, dass der Drucker über mehrere Druckschächte verfügt,
und zum anderen, dass die Schächte aus der Applikation heraus angesteuert werden können. In CONZEPT 16 wird über die Eigenschaft ppBinSourceName
des PrintDevice-Objekts der gewünschte Papierschacht angesprochen:
ErrTryCatch(_ErrHdlInvalid, True);
try
{
// PrintDevice öffnen
tDevice # PrtDeviceOpen('MyPrinter',_PrtDeviceSystem);
// Druckerschacht bestimmen
tDevice->ppBinSourceName # 'Schacht 2';
tJob # PrtJobOpen('',_Sys->spPathMyDocuments
+ '\MyPrintJob.job',_PrtJobOpenRead);
tJob->PrtJobClose(_PrtJobPrint,tDevice);
}
...
...
Die Namen der Schächte sind bei den Windows-Druckertreiber hinterlegt. Über die Funktion PrtInfoStr()
und der Option _PrtInfoBinName
lassen sich die Namen der Schächte des geöffneten Drucker-Device ermitteln. Die Anzahl der verfügbaren Druckerschächte liefert die Funktion PrtInfo(_PrtInfoBinCount)
zurück:
ErrTryCatch(_ErrHdlInvalid, True);
{
// PrintDevice öffnen
tDevice # PrtDeviceOpen('MyPrinter',_PrtDeviceSystem);
// Alle verfügbaren Schächte in einer Liste ausgeben
for tLoop # 1 loop inc(tLoop)
while (tLoop <= tDevice->PrtInfo(_PrtInfoBinCount))
{
tDataList->
WinLstDatLineAdd(tDevice->PrtInfoStr(_PrtInfoBinName,tLoop));
}
}
...
...
In diesem Zusammenhang möchten wir noch einmal eine häufig gestellte Frage beantworten, ob innerhalb eines Druckjobs unterschiedliche Schächte angesprochen werden können. Hierzu ist zu sagen, dass dies unter Windows nicht möglich ist. Für einen Windows-Druckjob kann lediglich ein Ausgabeschacht definiert werden. Analog dazu ist das Mischen unterschiedlicher Formate ebenfalls nicht möglich. Eine Lösung stellt die Aufteilung des Druckauftrags in mehrere Jobs dar.
3 Antworten
Sie können bei der Eigenschaft ppBinSourceName zur Selektion des Schachtes auch Platzhalter verwenden. Zum Beispiel ‘*2’ für den ersten Schacht der mit ‘2’ endet, für ‘Fach 2’, ‘Schacht 2’ oder ‘Tray 2’.
Außerdem können Sie mit den Funktionen PrtInfo() und PrtInfoStr() über alle Schächte iterieren und einen passenden mit der Eigenschaft ppBinSource setzen.
In der CodeLibrary finden Sie das Beispiel "PrtInfo" das detaillierte Informationen zu den installierten Druckern – auch zu den Schächten – anzeigt.
@Th.Eichele
Das ist richtig. Je nach Druckertreiber und Sprache fallen die Namen unterschiedlich aus.
d.h. es gibt keinen "genormten" Zugriff auf den Schacht 2 und man muß den Schachtnamen für eine "automatische" Kopie jedesmal abfragen oder je Drucker im System hinterlegen ?