Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zebra Drucker Etiketten Variablen (https://www.delphipraxis.net/197785-zebra-drucker-etiketten-variablen.html)

Graw 4. Sep 2018 09:15

Zebra Drucker Etiketten Variablen
 
Hallo,
ich brauch da nochmal eure Hilfe.
Ich kenne es von Dymo das ich dort mit der mitgelieferten Software ein Etikett erstellen kann und diese Etikettendatei dann mit meiner Software vor dem ausdrucken öffnen und editieren kann.
Ich ersetze halt Variablen mit Daten aus meiner Software.
Dies würde ich auch gerne mit einem Zebra Drucker realisieren.
Ich habe mit dem ZebraDesigner ein Etikett erstellt und würde dieses nun auch gerne öffnen und Variablen mit Daten ersetzen.
Leider ist dies mit der erstellten Label Datei anscheinend nicht möglich.
Zur Verfügung habe ich eine.lbl und eine.prn Datei.

Wie kann ich hiermit arbeiten? Hat zufällig jemand Erfahrungen mit Zebra Druckern?

Vielen Dank im voraus.

Olli73 4. Sep 2018 10:41

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Zitat von Graw (Beitrag 1412404)
Hat zufällig jemand Erfahrungen mit Zebra Druckern?

Ich habe schon mal eine Ansteuerung für Zebra-Drucker gemacht, aber wir schicken die Druckbefehle direkt an den Drucker - ohne Designer. Das hilft dir wohl nicht weiter...

himitsu 4. Sep 2018 10:44

AW: Zebra Drucker Etiketten Variablen
 
Es gibt garantiert auch ein SDK,
womit diese Vorlangen geladen, verändert und zum Drucker geschickt werden können.
Direkt auf deren Seite fand ich jetzt nichts (öffentlich, aber vielleicht im Support-Bereich, wenn man dort angemeldet ist),
aber https://www.nuget.org/packages/Zebra.Printer.SDK/ [edit] und https://www.zebra.com/de/de/products...nk-os-sdk.html [/edit]

Über eine API/SDK kannst du natürlich vom Programm auch sonstwas drucken lassen, selbst wenn du diese Vorlagen nicht laden könntest.

Die Zebradrucker können auch EPL und ZPL.
https://en.wikipedia.org/wiki/Eltron...mming_Language
https://en.wikipedia.org/wiki/Zebra_...ming_language)
https://www.zebra.com/us/en/support-...rint-mode.html
https://stackoverflow.com/questions/...-zebra-printer
[edit] Das von rokli ist EPL/ZPL ... im Prinzip sind das Texte mit Steuercodes (Escape-Sequenzen) [/edit]

http://techdocs.zebra.com/enterprise...rial/printing/
https://www.zebra.com/de/de/products...ser-print.html
https://torry.net/quicksearchd.php?S...ebra&Title=Yes
...

rokli 4. Sep 2018 10:59

AW: Zebra Drucker Etiketten Variablen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Graw,

wir Programmieren die Etikettendrucker auch direkt, schreiben die Befehle dann in eine ASCII Datei und senden die Datei dann via LPR an die IP Adresse des Druckers.

Speziell für Zebra sieht das dann - auschnittweise - so, oder so ähnlich aus wie in der Anlage. Dabei entspricht jede Zeile in der Datei einem Etikett. Die "geblauten" Teile sind nicht für die Öffentlichkeit geeignet :wink: .

Wenn Du in die Richtung weiter überlegst, kann ich Dir noch ein paar Tipps geben.

HolgerX 4. Sep 2018 12:10

AW: Zebra Drucker Etiketten Variablen
 
Hmm..

Zitat:

Zitat von rokli (Beitrag 1412414)
wir Programmieren die Etikettendrucker auch direkt, schreiben die Befehle dann in eine ASCII Datei und senden die Datei dann via LPR an die IP Adresse des Druckers.

Wirklich erst in eine Datei?

Wir arbeiten mit Script-Druckern so, dass der Drucker ganz normal unter Windows installiert wird, jedoch beim Drucken dann als DocInfo.pDatatype := 'RAW' verwendet wird.
So können ASCII-Daten direkt aus einem String an den Drucker gesendet werden, ohne dass Windows daran etwas verändert...

himitsu 4. Sep 2018 12:12

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Zitat von Graw (Beitrag 1412404)
Ich habe mit dem ZebraDesigner ein Etikett erstellt und würde dieses nun auch gerne öffnen und Variablen mit Daten ersetzen.
Leider ist dies mit der erstellten Label Datei anscheinend nicht möglich.

Mit dem ZebraDesigner erstellt?

Da vielleicht besser den ZebraDesigner Pro oder ZebraDesigner XML verwenden.
https://www.zebra.com/de/de/products...-designer.html

rokli 4. Sep 2018 12:17

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Zitat von HolgerX (Beitrag 1412416)
Hmm..

Wirklich erst in eine Datei?

Hallo Holger,

ja, sowohl in ASCII Dateien, oder auch in Tabellen in DB, da wir die Etiketten teilweise bis zu 5 Tagen vor der eigentlichen Benutzung erzeugen. Ein Teil der Etiketten (die aus den ASCII Dateien) werden von Roboter-Systemen über den Dateinamen identifiziert und dann automatisch, im Durchlauf, auf das Werkstück gebracht.

Ergänzung: Und dann natürlich ohne Windows/Windows-Treiber sondern mit LPR direkt auf die IP des Druckers.

Neumann 4. Sep 2018 12:21

AW: Zebra Drucker Etiketten Variablen
 
Wir installieren solche Drucker (Zebra, Bocca usw) als Windows-Drucker und drucken dann Tickets oder Etiketten mit Fastreports. Erscheint mir einfacher.

rokli 4. Sep 2018 12:27

AW: Zebra Drucker Etiketten Variablen
 
Wir kommen hier so langsam OT ... fürchte ich ...

HolgerX 4. Sep 2018 12:42

AW: Zebra Drucker Etiketten Variablen
 
Hmm..

ZebraDesigner..

Schon was her..

Aber ich glaube mit der ZebraDesigner ist es nur durch einen Trick möglich an das generierte ZPL-Script zu kommen.

Hierfür habe ich den Druckerport des installierten Zebra (ZPL) Drucker auf RedMon umgebogen und die Ausgabe dann in eine Datei gespeichert.

himitsu 4. Sep 2018 13:01

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Zitat von HolgerX (Beitrag 1412421)
Aber ich glaube mit der ZebraDesigner ist es nur durch einen Trick möglich an das generierte ZPL-Script zu kommen.

Zitat:

Zitat von himitsu (Beitrag 1412417)
Zitat:

Zitat von Graw (Beitrag 1412404)
Ich habe mit dem ZebraDesigner ein Etikett erstellt und würde dieses nun auch gerne öffnen und Variablen mit Daten ersetzen.
Leider ist dies mit der erstellten Label Datei anscheinend nicht möglich.

Mit dem ZebraDesigner erstellt?

Da vielleicht besser den ZebraDesigner Pro oder ZebraDesigner XML verwenden.
https://www.zebra.com/de/de/products...-designer.html

Laut der Beschreibung auf der Webseite klingt das von der PRO (oder XML) hierfür geeigneter.
Zitat:

Zitat von ZebraDesigner
... bietet grundlegende Designfunktionen.

Zitat:

Zitat von ZebraDesigner Pro
... Erstellen komplexer Etiketten mit festen oder variablen Daten.



PS: Umleiten/Abfangen von Druckausgaben.
https://www.colorpilot.com/emfprinterpilot.html

HolgerX 4. Sep 2018 13:13

AW: Zebra Drucker Etiketten Variablen
 
Hmm..

alternativ zum ZebraDesigner (noch nicht näher angeschaut)

https://sourceforge.net/projects/vzpl/

Oder bei Handerstellung der ZPLs zum Prüfen:

http://labelary.com/viewer.html

Das ganze als Java..

https://github.com/teynon/ZPL-Label-Designer
Mit Demo:
http://teynon.github.io/ZPL-Label-Designer/index.html

OK, es geht auch ohne Printer-Port:
https://stackoverflow.com/questions/...85389#16685389

HolgerX 4. Sep 2018 13:30

AW: Zebra Drucker Etiketten Variablen
 
Hmm..

Habe hier noch eine kleine Beschreibung gefunden (in EN und für andere Platzhalter)

https://help.benchling.com/general/c...ample-tracking

Aber alleine an den ScreenShots sollte der Weg ersichtlich sein..

Graw 5. Sep 2018 12:28

AW: Zebra Drucker Etiketten Variablen
 
Schon mal vielen Dank für die vielen Antworten.
Ich werde morgen wieder Zeit haben daran zu arbeiten.
Mal schauen ob und wie ich ans Ziel komme.
Ich werde dann berichten.

himitsu 5. Sep 2018 13:02

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Zitat von HolgerX (Beitrag 1412423)

als JavaScript


Im FF funktioniert der Generate-Button, aber egal, da man keine Elemente hinzufügen kann
und im IE kann ich Welche hinzufügen, aber das Generieren geht nicht. :stupid:

Aber das Projekt ist eh tot.

stifflersmom 5. Sep 2018 14:15

AW: Zebra Drucker Etiketten Variablen
 
Moin,

wir erstellen die vorlage einmalig im Zebradesigner und drucken das Etikett dann in eine Datei bzw. leiten den Port des Zebradruckers in eine Datei um.
Dann bekommst Du z.B. so was hier:
Code:
^XA~TA000~JSN^LT0^MNW^MTD^PON^PMN^LH0,0^JMA^PR5,5~SD15^JUS^LRN^CI0^XZ
^XA
^MMT
^PW799
^LL1199
^LS0
^FT772,1130^A0I,39,38^FH\^FDFirmenname^FS
^FT520,1127^A0I,28,28^FH\^FDGmbH & Co KG^FS
^FT772,1069^A0I,28,28^FH\^FDAuftrag:^FS
^FT646,1069^A0I,28,28^FH\^FD###VAR1###^FS
^FO19,1029^GB753,0,15^FS

^FT772,991^A0I,23,24^FH\^FDArtikel^FS
^FT653,991^A0I,23,24^FH\^FDOE^FS
^FT546,991^A0I,23,24^FH\^FDBeschreibung^FS
^FT240,991^A0I,23,24^FH\^FDBest./Gel.^FS
^FT120,991^A0I,23,24^FH\^FDPREIS^FS

^FT653,954^A0I,23,24^FH\^FD###VAR2###^FS
^FT772,954^A0I,23,24^FH\^FD###VAR3###^FS



^FT546,954^A0I,23,16^FH\^FDT222222222222222222222222222222^FS
^FT100,954^A0I,23,24^FH\^FD###VAR4###^FS
^FT240,954^A0I,23,24^FH\^FD###VAR5###^FS

^BY2,3,77^FT335,1074^BCI,,Y,N
^FD>:AUFTRAGLS^FS
^FT776,613^A0I,28,28^FH\^FD###VAR6###^FS
^PQ1,0,1,Y^XZ
Diese Datei bzw. diesen String dängelst Du dann mit Deinen Werten um schickst das per Indy direkt an den Drucker.
Das klappt wunderbar und ist pfeilschnell, weil sehr schlank :-)

Gruß

Graw 7. Sep 2018 06:46

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Diese Datei bzw. diesen String dängelst Du dann mit Deinen Werten um schickst das per Indy direkt an den Drucker.
Das klappt wunderbar und ist pfeilschnell, weil sehr schlank
Klappt das auch mit einem über USB angeschlossenen Zebra Drucker?

mjustin 7. Sep 2018 07:01

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Zitat von Graw (Beitrag 1412662)
Zitat:

Diese Datei bzw. diesen String dängelst Du dann mit Deinen Werten um schickst das per Indy direkt an den Drucker.
Das klappt wunderbar und ist pfeilschnell, weil sehr schlank
Klappt das auch mit einem über USB angeschlossenen Zebra Drucker?

Im Windows Netzwerk haben wir Zebra Drucker auf die wir reine ASCII (ZPL) Daten senden, dazu verwenden wir den Windows Sharenamen in der Form \\printserver\druckername

Hier wird beschrieben wie man einen lokalen USB Drucker einen Windows Share Namen zuweist:

http://www.nrgsoft.com/support/activ...?questionid=11

Dann die Druckdaten per Stringlist.SaveToFile('\\mypc\mylocalprinter') ausgeben.

(Disclaimer: mit lokalen Druckern habe ich es nicht selber getestet)

HolgerX 7. Sep 2018 09:16

AW: Zebra Drucker Etiketten Variablen
 
Hmm..

Wieso der Umweg über LPT....

Den Drucker ganz normal unter Windows installieren!

Und dann reicht folgendes, um jedes Script (kann ZPL, EPL oder anderes RAW-Script sein!) direkt programmtechnisch an den Drucker zu schicken:

Delphi-Quellcode:
uses
  WinSpool, Printers;

function SendRAWData(RAWData: AnsiString; Port : Ansistring):boolean;
var
  dwCount       : DWORD;
  hPrinter      : THandle;
  DocInfo       : TDocInfo1A;
  dwJOB         : DWORD;
  dwBytesWritten : DWORD;
begin
  result:=false;
  dwCount := Length(RAWData);
  if OpenPrinterA(PAnsiChar(Port), hPrinter, Nil) then begin
    try
      DocInfo.pDocName := 'RAWPrint';
      DocInfo.pOutputFile := Nil;
      DocInfo.pDatatype := 'RAW';
      dwJob := StartDocPrinterA(hPrinter, 1, @docInfo);
      if dwJob <> 0 then
        try
          if StartPagePrinter(hPrinter) then
            try
              if WritePrinter(hPrinter, PAnsichar(RAWData), dwCount, dwBytesWritten) then
                if dwBytesWritten <> dwCount then
                  raise Exception.Create('Übertragungsprobleme mit '+Port+'!')
                else result:=true;
            finally
              EndPagePrinter(hPrinter)
            end
        finally
          EndDocPrinter(hPrinter);
        end
    finally
      ClosePrinter(hPrinter)
    end;
  end else raise Exception.Create('Drucker '+Port+' nicht zur Verfügung!');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Port : string;
  Data : string;
begin
  if PrintDialog1.Execute then begin
    Port := Printer.Printers[Printer.PrinterIndex];
    Data := 'DIES IST DAS ASCII-SCRIPT';
    SendRAWData(Data,Port);
  end;
end;
(Ist nicht optimiert und verwendet nur ASCII (ANSI), was aber OK ist, da die meisten Scriptfähigen Drucker nicht Unicode per Script können!)

Es ist hierbei egal, ob der Drucker per USB/LPT/Netzwerk oder wie auch immer angeschlossen ist.

(Den Printdialog habe nur als Beispiel verwendet, der Drucker kann auch schon vorher selektiert/gespeichert worden sein.)

Edit:
Kann sogar auf normalen z.B. Laserdrucker verwendet werden, um direkt Text zu drucken.

mjustin 7. Sep 2018 20:17

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Zitat von HolgerX (Beitrag 1412678)

Wieso der Umweg über LPT....

Den Drucker ganz normal unter Windows installieren!

LPT habe ich hier noch nicht bei den Antworten gesehen (sollte aber im Prinzip so wie ein Share funktionieren). Mit dem Umweg über den Druckertreiber haben wir in einem Windows 2008 Server Umfeld (mit Delphi 2009 Enterprise) Anfang letzten Jahres keine guten Erfahrungen gemacht, was laut Informationen hier im Forum der Printers Unit geschuldet ist. Effekt war, dass nach einigen Ausdrucken die Printerqueue fehlerhafte Jobs enthielt, man dann immer die Queue löschen musste und jedesmal alle Ausdrucke verloren gingen. Der Ausdruck per Stringlist.SaveToFile('\\printserver\printername') mit tausenden Ausdrucken pro Woche deutlich stabiler. Nach Recherchen soll die Printers Unit in Delphi seit Delphi 2009 auch keine wesentlichen Verbesserungen erhalten haben. Wir wollten den Druckertreiber eigentlich nur dazwischenschalten um den Ausdruck mit kleinerer Schriftart auszugeben, und so einige Bäume einzusparen.

HolgerX 8. Sep 2018 14:10

AW: Zebra Drucker Etiketten Variablen
 
Hmm..

In meinem Source wird die 'Printers' nur für den Printerport verwendet.
Das Ausdrucken geht direkt über WinSpool-API, ohne Printers....

Die Funktionen werden bei uns intensiv eingesetzt, ebenfalls seit Jahren, gerade im Zusammenhang mit EPL und ZPL Druckern.

Somit kann ich die Printers-Probleme in diesem Zusammenhang nicht nachvollziehen.

mjustin 8. Sep 2018 15:47

AW: Zebra Drucker Etiketten Variablen
 
Zitat:

Zitat von HolgerX (Beitrag 1412741)
Hmm..

In meinem Source wird die 'Printers' nur für den Printerport verwendet.

Oh, das schliesst eine Fehlerquelle aus, die bei uns im Verdacht war. Den exakten Ursprung der Probleme mit den Druckerqueues konnten wir damals nicht weiter eingrenzen, dazu trat der Fehler zu sporadisch auf, und es gibt kaum Möglichkeiten einen Fehler in einer hängengebliebenen Druckerqueue zu debuggen. Vielleicht wagen wir einen weiteren Test, Danke für den Quelltext!

(Was im Zusammenhang mit Druckerqueues sehr praktisch wäre: eine Windows API-Möglichkeit, die Druckdaten vor dem Löschen der Queue in Dateien zu speichern, um den Druck zu wiederholen. Oder eine Art Callback nach dem Druck, so dass man alle Daten temporär in einer Datei bereithält, die nach dem Druck gelöscht wird)

HolgerX 8. Sep 2018 16:34

AW: Zebra Drucker Etiketten Variablen
 
Hmm..

Für den Print Spooler gibt es APIs..
Was damit möglich ist, kann ich nicht sagen, musste mich damit noch nicht auseinander setzen.. ;)

Ich weiß nur so viel, dass die Einträge zu einem Drucker ausgelesen werden können, ob damit auch ein Zugriff auf die Daten möglich ist.. ?!?!

Aber bevor wir damit weiter machen:
-> Zurück zum Thead...

(Drucker und Spooler besser neuer Thread) ;)

Graw 13. Sep 2018 14:45

AW: Zebra Drucker Etiketten Variablen
 
Hi,

habe es nun mit Fast Report gelöst.
Gefällt mir super!!!

Danke für alle Antworten.

rokli 14. Sep 2018 10:37

AW: Zebra Drucker Etiketten Variablen
 
Hallo Graw,

kannst Du das bitte kurz beschreiben, wie Du das via FR gemacht hast? Danke.

frsi 4. Apr 2019 06:52

AW: Zebra Drucker Etiketten Variablen
 
Hallo rokli,
direkt über lpr auf den Drucker ist echt cool. Schnell und keine Treiberinstallation.
Würdest du mir eine Asci-Datei geben? Dann spare ich mir das Gesuche auf der Zebraseite, wie die Datei aussehen muss.
Ich kenne das für einen TSC Drucker. Da ging es so, dass im Kopf der Datei Formatierungen und Befehle stehen. Das zu druckende in " mit Positionsanweisungen. Ich nehme an, dass das für die Zebradrucker ähnlich geht. Falls du es für TSC bruachst können wir tauschen.
Weisst du ob es eine bestimmte Firmware o ä für den Drucker bruacht oder können das alle Zebras?
Da
Zitat:

Zitat von rokli (Beitrag 1412414)
Hallo Graw,

wir Programmieren die Etikettendrucker auch direkt, schreiben die Befehle dann in eine ASCII Datei und senden die Datei dann via LPR an die IP Adresse des Druckers.

Speziell für Zebra sieht das dann - auschnittweise - so, oder so ähnlich aus wie in der Anlage. Dabei entspricht jede Zeile in der Datei einem Etikett. Die "geblauten" Teile sind nicht für die Öffentlichkeit geeignet :wink: .

Wenn Du in die Richtung weiter überlegst, kann ich Dir noch ein paar Tipps geben.



Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 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