Programmierung

Druck-Objekte (Teil II)

In dem Artikel Druck Objekte Teil I bin ich auf das PrintDocRecord-Objekt eingegangen. Ein Objekt, welches sich für die schnelle Erstellung von Drucklisten und Reports eignet.

Der heutige Artikel befasst sich mit dem PrintDoc-Objekt. Das PrintDoc wurde speziell für das Erstellen von Druckvorlagen, wie zum Beispiel Formulare, Briefvorlagen, Etiketten etc., konzipiert.


Aufbau

Der Aufbau des PrintDoc-Objekts erfolgt hierarchisch. Die Basis bildet das PrintDoc-Objekt selbst. Über dieses Objekt wird neben verschiedenen Farb- und Formatierungseinstellungen das Papierformat der Druckvorlage bestimmt. Über die Eigenschaft ppPageFormat stellt CONZEPT 16 bereits eine Reihe von vordefinierten Papierformaten nach der Deutsche Industrie Norm sowie US-Amerikanische Formate zur Verfügung. Benutzerdefinierte Formate können über die Eigenschaften ppPageHeight und ppPageWidth erstellt werden.

PrtDoc-Objekt

Das Basis-Objekt kann keine Objekte aufnehmen, die den Seiteninhalt bestimmen. Dazu ist dem PrintDoc-Objekt ein sogenanntes Seiten- bzw. PrtPage-Objekt hinzuzufügen. Neben den Objekten aus der Objekt-Palette “Druck” können dem PrtPage-Objekt zwei spezielle Objekte für das Erzeugen eines Kopf- und Fußbereichs hinzugefügt werden.

Seiten-Objekt mit Kopf- und Fußbereich

Das PrintDoc-Objekt kann bis zu zehn unterschiedliche Seiten-Objekte aufnehmen. Während der Druckaufbereitung können die einzelnen Seiten-Objekte angesprochen werden. Auf diese Weise lässt sich ein Seitenobjekt mit unterschiedlichen Inhalten beliebig oft ausgeben.
Ein typischer Anwendungsfall ist eine Briefvorlage. Für die Vorlage werden zwei Seitenobjekte definiert. Ein Objekt beinhaltet die erste Seite mit Briefkopf und Anschrift, das zweite Objekt gibt die Folgeseite(n) aus.

Briefvorlage mit zwei Seiten-Objekten
// Druckjob öffnen
tJob # PrtJobOpen('Briefvorlage','',_PrtJobOpenWrite |
                                    _PrtJobOpenTemp);

// PrtDoc-Objekt ermitteln
tDoc  # tJob->PrtInfo(_PrtDoc);
// Erste Seite drucken
tJob->PrtJobWrite(tDoc->PrtSearch('Seite1'));
// Seite 2 ermitteln
tPage # tDoc->PrtSearch('Seite2')
// Seite 2 drucken, solange Text vorhanden
while (CheckText())
{
  // Seite drucken
  tJob->PrtJobWrite(tPage);
}
//Druckjob an den Drucker senden
tJob->PrtJobClose(_PrtJobPrint);
4 Kommentare

4 Kommentare “Druck-Objekte (Teil II)”

  1. @Th.Eichele

    Ja, dies ist möglich. Mit Hilfe des Befehls PrtInfo(). Wird dort der Parameter _PrtInfoPaperID angegeben, kann die intere ID des Papierformats ermittelt werden. Dabei gibt tCnt den Index des Papierformats innerhalb des Druckers an.

    Das ausgewählte Papierformat kann über die Eigenschaft ppPageFormat des PrtDoc-Objekts ermittelt werden.

    Beispiel:

    tSelectedPaper # aPrtDoc->ppPageFormat;
    tPaperCnt # aPrtDevice->PrtInfo(_PrtInfoPaperCount);
    for tIndexCnt # 1;
    loop inc(tIndexCnt);
    while (tIndexCnt<= tPaperCnt )
    {
    if (aPrtDevice->PrtInfo(_PrtInfoPaperID, tIndexCnt) = tSelectedPaper)
    return(true);
    }

  2. Vorschlag: Es sollte in den komplexeren Druckobjekten (Druckdokumente, Druckformulare usw.) die Möglichkeit geben einfache graphische Tabellen einzufügen (ähnlich wie in Word). Viele Kunden wollen Druckvorlagen realisiert haben, die zum einen zu komplex für die DocRecord-Möglichkeit sind, zum andern aber etliche Tabellen enthalten, die man dann unglaublich mühsam Linie für Linie zusammenstellen muss um sie exakt dem Kundenwunsch gemäss darstellen zu können.

Kommentar abgeben