Programmierung

Benutzerdefinierte Druckformate

Oftmals werden Dokumente auf Standardformaten, wie DIN A4 gedruckt. Jedoch kommt es auch vor, dass eine Applikation beispielsweise Etiketten drucken soll, die keinem Standardformat entsprechen. In diesem Artikel möchte ich Ihnen zeigen, was beim Druck auf benutzerdefinierten Formaten zu beachten ist.

Unterstützt der Drucker benutzerdefinierte Formate?

Um auf einem Drucker in anderen Formaten zu drucken, muss dieser benutzerdefinierte Formate unterstützen. Je nach Drucker muss die Größe vordefiniert werden, oder nur das Format auf benutzerdefiniert gestellt werden. Weiterhin kann ein Drucker, der nur Text drucken kann, nicht mit den GDI-Druckfunktionen angesteuert werden.

CONZEPT 16-seitige Eigenschaften

Zunächst muss dem Drucker mitgeteilt werden, dass auf ein benutzerdefiniertes Format gedruckt werden soll. Dies geschieht über das PrintDoc-Objekt:

tDoc # tJob->PrtInfo(_PrtDoc)
if (tDoc > 0)
{
  tDoc->ppPageFormat # _PrtPaperFormatUser;

Anschließend wird die Papiergröße gesetzt:

  // Größe auf 55 x 26 Millimeter setzen
  tDoc->ppPageWidth  # PrtUnitLog(55.0, _PrtUnitMillimetres);
  tDoc->ppPageHeight # PrtUnitLog(26.0, _PrtUnitMillimetres);
}

Der Rand sollte für den Druck explizit gesetzt werden. Dies geschieht wie folgt bei der ersten PrtPage:

// Erste Seite ankündigen
tPage # tJob->PrtJobWrite(_PrtJobPageStart);
if (tPage > 0)
{
  // Rand entfernen
  tPage->ppMarginLeft    # 0;
  tPage->ppMarginTop     # 0;
  tPage->ppMarginRight   # 0;
  tPage->ppMarginBottom  # 0;

Je nachdem, wie viel Platz durch einen Datensatz auf dem Ettikett eingenommen wird, kann ein automatischer Umbruch erfolgen, oder muss ein manueller Umbruch eingefügt werden:

  // automatischer Umbruch
  tPage->PrtAdd(tForm,_PrtAddPageBreak);

  // manueller Umbruch
  tPage->PrtAdd(tForm);
  tJob->PrtJobWrite(_PrtJobPageBreak);

Das Resultat kann in der Druckvorschau angesehen werden. Dazu muss vorher der Etikettendrucker mit tDevice # PrtDeviceOpen('Etiketten',_PrtDeviceSystem) geöffnet werden. Dieser wird dann an die Funktion PrtJobClose() übergeben:

  // Vorschau anzeigen
  tResult # tJob->PrtJobClose(_PrtJobPreview, tDevice);

  // Ohne Vorschau ausdrucken
  tResult # tJob->PrtJobClose(_PrtJobPrint, tDevice);

Der Fehlercode von PrtJobClose() sollte überprüft werden. Hier kann beispielsweise _ErrPrtPaperFormat zurückgegeben werden. Das weist darauf hin, dass der Drucker entweder das benutzerdefinierte Format nicht unterstützt, oder die Größe vor dem Druck auch in den Windows-Druckereinstellungen definiert werden muss.

1 Kommentar

1 Kommentar zu “Benutzerdefinierte Druckformate”

Kommentar abgeben