![]() |
Etikettendruck auf Brother QL-1060N
Hallo,
ich möchte über meine Anwendung auf einen Netzwerk Etikettendrucker "Brother QL-1060N" drucken. Erstes Problem ist den Drucker übs Netz anzusprechen, das zweite ist die Etikette. Wie gehe ich hier am Besten vor, über Quickreport oder direkt an den Drucker senden ? Für den Drucker gibt's ja auch einen Labelcreator, wie kann man fertige Labels ansprechen ? |
AW: Etikettendruck auf Brother QL-1060N
Du musst den Drucker und damit dessen Treiber auf der Workstation auf der die Anwendung läuft installieren. Dann erstellst Du ganz normale Druckstücke und druckst diese. Wenn es auf Performance ankommt, musst Du den Drucker evtl. als RAW installieren (Server UND Workstation) und schickst einen Druckdatenstrom. Ansonsten rendert der Treiber das evtl. als Grafik und schickt die dann zum Drucker.
|
AW: Etikettendruck auf Brother QL-1060N
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo...
Brother hat für seine Etikettendrucker ein SDK. ![]() Daraus erzeugt man die TLB. (Hast du schon im Anhang). Leider haben die eine Klasse TPrinter genannt. :wall: Im Zweifelsfalle umbenennen. Damit kannst du mit dem Editor erzeugte Etiketten (Datei) laden, ausfüllen und zum Drucker schicken. Treiber logischerweise vorausgesetzt. Empfehlung: Beschäftigung mit dem SDK...:P Ein Druck über Reportgenerator würde zwar auch gehen, aber die spezifischen Funktionen wie z.B. wann geschnitten wird, sind dann nicht verfügbar. Weil bald Weihnachten ist... Beispielcode:
Delphi-Quellcode:
uses ... bpac_TLB,
FPTouchDocument: IDocument; . . FPTouchDocument:= CreateComObject(CLASS_Document) as IDocument; . . function TdBK_Preferences.GetLabelPrinters: TStrings; var I: Integer; PTouchPrinter: IPrinter; begin Result:= FLabelPrinterList; FIsSDKRegistered:= False; try PTouchPrinter:= CreateComObject(CLASS_Printer) as IPrinter; // SDK Test FIsSDKRegistered:= True; except // SDK nicht registriert end; FLabelPrinterList.Clear; for I := 0 to Printer.Printers.Count - 1 do begin FLabelPrinterList.Add(Printer.Printers[I]); end; end; . . procedure TdBK_Print.PrintLabel(Article: TdBK_DataArticle; LabelType: TdBK_LabelType; Count: Cardinal); var CurrentLabel: string; function FormatText(aText: string): string; begin Result:= ' '; // Leerzeichen bei leerem Text da sonst Fehler. if aText <> '' then begin Result:= aText; end; end; begin case LabelType of ltNormal: begin CurrentLabel:= dm.dBK.Preferences.Print.FileNameLabelNormal; end; ltOffer: begin CurrentLabel:= dm.dBK.Preferences.Print.FileNameLabelOffer; end; end; if FileExists(CurrentLabel) then begin try FPTouchDocument.SetPrinter(dm.dBK.Preferences.Print.LabelPrinterName, False); FPTouchDocument.Open(CurrentLabel); try FPTouchDocument.StartPrint('dBK Label', bpoCutAtEnd); FPTouchDocument.GetObject('Text1').Text:= FormatText(Article.ArticleName); FPTouchDocument.GetObject('Text2').Text:= FormatText(Article.ArticleCaption); FPTouchDocument.GetObject('ValueNormal').Text:= FormatText(FloatToStrF(Article.CostGross, ffFixed, 8, 2) + ' ' + conCurrencyString); case LabelType of ltNormal: begin FPTouchDocument.SetBarcodeData(0, Article.ArticleNumber); end; ltOffer: begin FPTouchDocument.GetObject('ValueOffer').Text:= FormatText(FloatToStrF(Article.CostOffer, ffFixed, 8, 2) + ' ' + conCurrencyString); FPTouchDocument.SetBarcodeData(0, '_' + Article.ArticleNumber); end; end; FPTouchDocument.PrintOut(Count, bpoDefault); FPTouchDocument.EndPrint; finally FPTouchDocument.Close; end; except MessageDlg('Die Vorlagendatei ' + QuotedStr(CurrentLabel) + ' konnte nicht verarbeitet werden. Bitte prüfen Sie das Layout.', mtError, [mbOK], 0); end; end else begin MessageDlg('Die Vorlagendatei ' + QuotedStr(CurrentLabel) + ' konnte nicht gefunden werden. Bitte prüfen Sie die Einstellungen.', mtError, [mbOK], 0); end; end; |
AW: Etikettendruck auf Brother QL-1060N
Hallo,
vielen Dank, das schau ich mir mal an, bringt mich weiter :thumb: Das mit der SDK eröffnet mir noch ein paar Möglichkeiten mehr. |
AW: Etikettendruck auf Brother QL-1060N
Aber bitte nicht das Exception-Handling so übernehmen, da kräuseln sich mir die Fussnägel.
So in der Art wäre das schon viel besser (und vor allem aussagekräftiger):
Delphi-Quellcode:
Wichtig ist die Dokumentation, welche Exceptions auftreten können.
unit de.company.FooFramework;
interface uses System.SysUtils; type EFooException = class( Exception ); EFooNoPrinterException = class( EFooException ); EFooTemplateParseException = class( EFooException ); type TFoo = class /// <summary> /// Druckt ein Etikett auf einem Etiketten-Drucker aus /// </summary> /// <exception cref="EFooTemplateParseException"> /// <see cref="EFooTemplateParseException">EFooTemplateParseException</see> /// Bei einem Parser-Fehler /// </exception> /// <exception cref="EFileNotFoundException"> /// <see cref="EFileNotFoundException">EFileNotFoundException</see> /// Wenn die Vorlage nicht gefunden wurde /// </exception> procedure PrintLabel( ); end; implementation { TFoo } procedure TFoo.PrintLabel; var CurrentLabel: string; begin if not FileExists( CurrentLabel ) then raise EFileNotFoundException.CreateFmt( 'Datei %s wurde nicht gefunden', [ CurrentLabel ] ); try // Parsen der Datei except // Wir wrappen alle auftretenden Ausnahmen mit unserer Exception-Klasse raise EFooTemplateParseException.CreateFmt( 'Fehler beim Parsen der Datei %s', [ CurrentLabel ] ); end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz