AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zebra Drucker Etiketten Variablen

Ein Thema von Graw · begonnen am 4. Sep 2018 · letzter Beitrag vom 4. Apr 2019
Antwort Antwort
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#1

AW: Zebra Drucker Etiketten Variablen

  Alt 7. Sep 2018, 09:16
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.

Geändert von HolgerX ( 7. Sep 2018 um 09:36 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Zebra Drucker Etiketten Variablen

  Alt 7. Sep 2018, 20:17

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.
Michael Justin
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#3

AW: Zebra Drucker Etiketten Variablen

  Alt 8. Sep 2018, 14:10
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.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Zebra Drucker Etiketten Variablen

  Alt 8. Sep 2018, 15:47
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)
Michael Justin
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#5

AW: Zebra Drucker Etiketten Variablen

  Alt 8. Sep 2018, 16:34
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)
  Mit Zitat antworten Zitat
Graw

Registriert seit: 26. Apr 2017
78 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Zebra Drucker Etiketten Variablen

  Alt 13. Sep 2018, 14:45
Hi,

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

Danke für alle Antworten.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
302 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Zebra Drucker Etiketten Variablen

  Alt 14. Sep 2018, 10:37
Hallo Graw,

kannst Du das bitte kurz beschreiben, wie Du das via FR gemacht hast? Danke.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 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-2025 by Thomas Breitkreuz