Zum Hauptinhalt springen

Formular-Designer - Ausgabe auf den Drucker

Formular-Designer - Ausgabe auf den Drucker Auswahl und Einstellungen eines Druckers.

Ein Dokument kann entweder in der Druckvorschau durch Drücken der Schaltfläche [Drucken] oder ohne die Druckvorschau durch Angabe einer Ausgabeeinheit beim Befehl PrtJobClose () ausgedruckt werden. Werden sowohl die Druckvorschau angezeigt, als auch die Ausgabeeinheit gesetzt, wird der entsprechende Drucker im Auswahldialog voreingestellt.

Beispiel:

tPrtDevice # PrtDeviceOpen('Acrobat PDFWriter', _PrtDeviceSystem);
tPrtJob # PrtJobOpen('Letter', '', _PrtJobOpenWrite, _PrtTypePrintDoc);
tPrtJob->PrtJobWrite(_PrtJobDoc);
tErr # tPrtJob->PrtJobClose(_PrtJobPreview, tPrtDevice);
tPrtDevice->PrtDeviceClose();

In diesem Beispiel wird die Druckvorschau angezeigt und der Druckertreiber "Acrobat PDFWriter" als Ausgabeeinheit voreingestellt. Der Benutzer hat vor dem Drucken noch die Möglichkeit einen anderen Drucker auszuwählen.

Wird beim Befehl PrtJobClose () die Konstante _PrtJobPreview durch _PrtJobPrint ersetzt, wird ohne Anzeige der Vorschau der Druckjob sofort auf den angegebenen Drucker ausgedruckt:

tPrtDevice # PrtDeviceOpen('Acrobat PDFWriter', _PrtDeviceSystem); 
tPrtJob # PrtJobOpen('Letter', '', _PrtJobOpenWrite, _PrtTypePrintDoc);
tPrtJob->PrtJobWrite(_PrtJobDoc);
tErr # tPrtJob->PrtJobClose(_PrtJobPrint, tPrtDevice);
tPrtDevice->PrtDeviceClose();

Der Rückgabewert der Anweisung PrtJobClose () gibt Auskunft darüber, ob der Druckjob an den Drucker übergeben werden konnte. Hat zum Beispiel der Druckjob ein Seitenformat, das vom Druckertreiber nicht unterstützt wird, wird der Fehler _ErrPrtPaperFormat zurückgegeben.

In diesem speziellen Fall wird noch ein Dialog zur Eingabe des Dateinamens der erzeugten PDF-Datei angezeigt. Dieser Dialog wird nicht angezeigt, wenn beim Druckjob die Eigenschaft PdfFileName gesetzt ist.

Die Angabe des Druckernamens und der Konstante kann entfallen, wenn der Standarddrucker geöffnet werden soll.

Die Namen der installierten Drucker können mit dem Befehl PrtInfo () der Druckerliste ermittelt werden. Die Druckerliste ist beim Applikations-Objekt (_App) abgelegt. Ein DataList -Objekt kann mit folgenden Anweisungen mit den Namen aller installierten Druckern gefüllt werden:

// Druckerliste ermitteln
tPrinterList # _App->PrinterList(_PrtListRefresh);

// Ersten Drucker lesen
tPrinter # tPrinterList->PrtInfo(_PrtFirst);
while (tPrinter != 0)
{
// Zeile mit dem Namen des Druckers des DataList-Objektes hinzufügen
$dlPrinter->WinLstDatLineAdd(tPrinter->ppCaption, _WinLstDatLineLast);

// Nächsten Drucker lesen
tPrinter # tPrinter->PrtInfo(_PrtNext);
}

Ist der Name des Druckers ermittelt, kann die Ausgabeeinheit mit dem Befehl PrtDeviceOpen () geöffnet werden. Dabei muss die Konstante _PrtDeviceSystem angegeben werden. Das Printer -Objekt stellt Informationen zu dem Drucker (zum Beispiel den Status und die Anzahl der gerade verarbeiteten Druckjobs) zur Verfügung, während über das PrintDevice -Objekt die Einstellungen des Druckers (zum Beispiel das Papierformat und die Anzahl der zu druckenden Kopien) abgefragt und gesetzt werden können.

Die Verarbeitung eines Druckjobs erfolgt auf zwei Ebenen:

  • Dokument-Ebene
  • Drucker-Ebene

Bei der Erstellung eines Dokumentes mit Hilfe der Formular-Objekte wird mit dem Schließen des Druckjobs (PrtJobClose ()) ein Drucker unabhängiger Job erzeugt. Wird dieser Job in einer externen Datei gespeichert, wird die Drucker-Ebene nicht angesprochen.

Erst wenn der unabhängige Job an eine Ausgabeeinheit ( PrintDevice ), welche die für diesen Ausdruck notwendigen Einstellungen aufweist (zum Beispiel des Seitenformates), weitergeleitet wird, erfolgt die Weitergabe an die Drucker-Ebene. Hier findet unter anderem die Verbindung vom Papierformat des Druckjobs und der von Drucker unterstützten Papierformate statt.