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.
Eine Antwort
eine weitere verbreitete Variante sind Kassen-Bondrucker, wobei hier noch die Herausforderung ist, das man eigentlich keine Seitenlänge weiß
(10cm bis > 1m, je nach Anzahl Positionen)