Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Etikettendruck auf Brother QL-1060N (https://www.delphipraxis.net/185988-etikettendruck-auf-brother-ql-1060n.html)

waldforest 24. Jul 2015 15:30

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 ?

Union 24. Jul 2015 15:36

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.

haentschman 24. Jul 2015 18:54

AW: Etikettendruck auf Brother QL-1060N
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo...

Brother hat für seine Etikettendrucker ein SDK. http://www.brother.com/product/dev/label/bpac/
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;

waldforest 25. Jul 2015 08:33

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.

Sir Rufo 25. Jul 2015 08:44

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:
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.
Wichtig ist die Dokumentation, welche Exceptions auftreten können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz