Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Papierschneider eines POS Druckers ansteuern (https://www.delphipraxis.net/216297-papierschneider-eines-pos-druckers-ansteuern.html)

TurboMagic 5. Dez 2024 20:57

Papierschneider eines POS Druckers ansteuern
 
Hallo,

ich würde gerne den Cutter eines POS Druckers benutzen.
Wenn ich das "roh" als ESC/Pos Kommando hin sende klappt alles.

Nur die Frage: gibt's da nicht direkt was im Drucken API von Windows dafür?
Ich konnte bisher noch nichts finden.

Und falls es nichts gibt:
Wenn ich meine bisherige Druckausgabe (die komplett auf ESC/Pos Befehle setzt)
durch Drucken per GDI/Printers.pas umsetelle, wo muss dann der Befehl zum
Ansteuern des Cutters hin? Vor EndPage und EndDoc oder zwischen EndPage und
EndDoc oder nach EndDoc?

Ach ja, für C# scheint's was "out of the box" zu geben:
https://learn.microsoft.com/en-us/uw...ntjob-cutpaper

himitsu 5. Dez 2024 21:51

AW: Papierschneider eines POS Druckers ansteuern
 
Bestimmt nach EndPage/EndDoc? (nachdem die Seite fertig ist)

Ich dachte TPrinter hätte eine Public/Protected Methode, zum Senden von Daten, aber nee?

Wenn du ans TPrinter.FPrinterHandle dran kommst, dann kannst du WritePrinter aus der Winapi.WinSpool.pas benutzen.
(
Delphi-Quellcode:
property Handle: HDC
ist ja das falsche Handle)




https://blog.idera.com/developer-too...hrough-escape/
https://github.com/git-bee/TRAWPrint...RawPrinter.pas

Redeemer 5. Dez 2024 21:52

AW: Papierschneider eines POS Druckers ansteuern
 
Zitat:

Zitat von TurboMagic (Beitrag 1543938)
Nur die Frage: gibt's da nicht direkt was im Drucken API von Windows dafür?
Ich konnte bisher noch nichts finden.

Man stellt in den Druckeinstellungen von Windows ein, dass nach dem Druck abgeschnitten werden soll. So ist das zumindest bei unseren Citizens.

TurboMagic 5. Dez 2024 21:58

AW: Papierschneider eines POS Druckers ansteuern
 
Zitat:

Zitat von himitsu (Beitrag 1543943)
Bestimmt nach EndPage/EndDoc? (nachdem die Seite fertig ist)

Ich dachte TPrinter hätte eine Public/Protected Methode, zum Senden von Daten, aber nee?

Wenn du ans TPrinter.FPrinterHandle dran kommst, dann kannst du WritePrinter aus der Winapi.WinSpool.pas benutzen.
(
Delphi-Quellcode:
property Handle: HDC
ist ja das falsche Handle)




https://blog.idera.com/developer-too...hrough-escape/
https://github.com/git-bee/TRAWPrint...RawPrinter.pas

Danke. Ich bekomme bisher schon RAW Daten an den Drucker geschickt und somit den Cutter angesteuert.
Nur mach' ich da halt derzeit alles per ESC/POS. Ich hatte halt gehofft, dass Windows schlau genug ist
für sowas auch mal endlich eine Methode bereit zu stellen,

TurboMagic 5. Dez 2024 22:00

AW: Papierschneider eines POS Druckers ansteuern
 
Zitat:

Zitat von Redeemer (Beitrag 1543945)
Zitat:

Zitat von TurboMagic (Beitrag 1543938)
Nur die Frage: gibt's da nicht direkt was im Drucken API von Windows dafür?
Ich konnte bisher noch nichts finden.

Man stellt in den Druckeinstellungen von Windows ein, dass nach dem Druck abgeschnitten werden soll. So ist das zumindest bei unseren Citizens.

Naja, dann müsste ich aber für jeden einzelnen Bon (also nicht eine Rechnung, sondern eine Wertmarke z.B. für 1x Pommes)
ein eigenes Dokument erzeugen. Und der Anwender muss das in den Druckertreiber Einstellungen einstellen.
Nur: Anwender und was einstellen...
...riecht nach mehr Supportaufwand.

Aber danke trotzdem!

himitsu 5. Dez 2024 22:03

AW: Papierschneider eines POS Druckers ansteuern
 
Windows ja
Embarcadero nein
und um es zu zementieren, verstecken sie den nötigen Zugang vor dir. :stupid:

Auch was den Zugang zu druckerspezifischen Settings betrifft.

jaenicke 5. Dez 2024 22:09

AW: Papierschneider eines POS Druckers ansteuern
 
Zitat:

Zitat von TurboMagic (Beitrag 1543938)
Ach ja, für C# scheint's was "out of the box" zu geben:
https://learn.microsoft.com/en-us/uw...ntjob-cutpaper

Das ist nicht nur für C#. Das kannst du auch problemlos in Delphi nutzen. Schau dir einfach mal die Unit Winapi.Devices.PointOfService.pas an, die im Rahmen der Windows RT API Schnittstellen mit Delphi mitgeliefert wird.

Zitat:

Zitat von TurboMagic (Beitrag 1543938)
Wenn ich meine bisherige Druckausgabe (die komplett auf ESC/Pos Befehle setzt)
durch Drucken per GDI/Printers.pas umsetelle

Wäre es im POS Bereich nicht sinnvoller, auf ePOS-Print XML zu setzen?

TurboMagic 5. Dez 2024 22:30

AW: Papierschneider eines POS Druckers ansteuern
 
Hallo,

danke für diese Hinweise!
Habe bei meiner Google Suche nichts gefunden gehabt, welches auf die
von dir aufgeführte Unit hinweißt oder das darunter liegende API.

Naja, der Druckencode ist schon älter und ich weiß auch noch nicht ob
dieses XML format vom Drucker unterstützt wird. Drucken üer GDI aber
definitiv.

Ich weiß noch nicht so recht, was mir ePOS-Print bringen soll.
Muss ich mal bei nächster Gelegenheit recherchieren.

jaenicke 5. Dez 2024 23:35

AW: Papierschneider eines POS Druckers ansteuern
 
Zitat:

Zitat von TurboMagic (Beitrag 1543951)
ich weiß auch noch nicht ob
dieses XML format vom Drucker unterstützt wird.

Das geht natürlich nur mit Druckern von Epson. Aber im Kassenbereich sind diese ja weit verbreitet.

Zitat:

Zitat von TurboMagic (Beitrag 1543951)
Ich weiß noch nicht so recht, was mir ePOS-Print bringen soll.
Muss ich mal bei nächster Gelegenheit recherchieren.

Ein wichtiger Vorteil ist, dass man keine Treiber und kein bestimmtes Betriebssystem benötigt. Man kann diese Druckaufträge einfach direkt an den Drucker schicken, ohne sich um Treiber oder die Druckerwarteschlange von Windows zu kümmern. Das macht die Einrichtung eines Kassensystems deutlich einfacher. Außerdem funktioniert es sehr gut z.B. mit Tablets oder cloudbasierter Kassensoftware.

Olli73 6. Dez 2024 06:41

AW: Papierschneider eines POS Druckers ansteuern
 
Wähl mal den Font "control" und size 9 (bei letzterem weiß ich nicht, ob das wichtig ist) und sende ein "P" ...

(Ist hoffentlich ein Epson-Drucker oder was kompatibles.)

HolgerX 6. Dez 2024 16:05

AW: Papierschneider eines POS Druckers ansteuern
 
Hmm..

Zitat:

Zitat von TurboMagic (Beitrag 1543948)
Zitat:

Zitat von Redeemer (Beitrag 1543945)
Zitat:

Zitat von TurboMagic (Beitrag 1543938)
Nur die Frage: gibt's da nicht direkt was im Drucken API von Windows dafür?
Ich konnte bisher noch nichts finden.

Man stellt in den Druckeinstellungen von Windows ein, dass nach dem Druck abgeschnitten werden soll. So ist das zumindest bei unseren Citizens.

Naja, dann müsste ich aber für jeden einzelnen Bon (also nicht eine Rechnung, sondern eine Wertmarke z.B. für 1x Pommes)
ein eigenes Dokument erzeugen. Und der Anwender muss das in den Druckertreiber Einstellungen einstellen.
Nur: Anwender und was einstellen...
...riecht nach mehr Supportaufwand.

Wir verwenden Drucker von Zebra mit Cutter für Endlos-Etiketten, um hier unterschiedlich lange Etiketten zu erzeugen.
Hier aktivieren wir das Schneiden nach dem Druckende im Treiber.

Unsere Druckroutine kann dann einfach per TPrinter das Etikett drucken, muss nur am unteren Rand einen kleinen schwarzen Punkt setzen, damit das Etikett die richtige höhe hat und nicht nach der letzten Text-Zeile bereits abschneidet.

Im Treiber steht glaube ich dann auch Endlospapier oder A4.....

TurboMagic 7. Dez 2024 12:13

AW: Papierschneider eines POS Druckers ansteuern
 
Zitat:

Zitat von jaenicke (Beitrag 1543950)
Zitat:

Zitat von TurboMagic (Beitrag 1543938)
Ach ja, für C# scheint's was "out of the box" zu geben:
https://learn.microsoft.com/en-us/uw...ntjob-cutpaper

Das ist nicht nur für C#. Das kannst du auch problemlos in Delphi nutzen. Schau dir einfach mal die Unit Winapi.Devices.PointOfService.pas an, die im Rahmen der Windows RT API Schnittstellen mit Delphi mitgeliefert wird.

Zitat:

Zitat von jaenicke (Beitrag 1543950)
Zitat:

Zitat von TurboMagic (Beitrag 1543938)
Ach ja, für C# scheint's was "out of the box" zu geben:
https://learn.microsoft.com/en-us/uw...ntjob-cutpaper

Das ist nicht nur für C#. Das kannst du auch problemlos in Delphi nutzen. Schau dir einfach mal die Unit Winapi.Devices.PointOfService.pas an, die im Rahmen der Windows RT API Schnittstellen mit Delphi mitgeliefert wird.

Ich hab' mir die Unit mal grob angeschaut. Das sind lauter Interface Deklarationen.
Mir fehlt jetzt nur noch, wie ich so eine Interface Referenz bekomme.

Eine erste Google Suche mit Delphi mit als Suchbegriff hat noch nichts in der Richtung geliefert.
Naja, evtl. mal nach dem Mittagessen ohne Delphi als Stichwort suchen und dann schauen ob das was
adaptierbares raus kommt.

Die Frage wäre auch, ob ich das mit normalem GDI Drucken mischen kann. Diejenigen Interfaces in
der Unit die sich mit Textdrucken beschäftigen scheinen ja wieder Text direkt senden zu wollen;
womit man wieder direkt von den wenigen beim Drucker vorhandenen Schriftgrößen abhängig wäre.

Heutige POS Drucker sind aber auch für Grafikdruck schnell genug, d.h. ich würde eher eine Mischung
aus GDI Drucken und den Cut fähigen Interfaces dieser Unit bevorzugen.

Ist das technisch möglich und wie müsste ich das angehen?

Olli73 7. Dez 2024 12:33

AW: Papierschneider eines POS Druckers ansteuern
 
Was für ein Drucker ist es überhaupt?

Probiere doch Mal das mit control Font aus...

jaenicke 7. Dez 2024 14:05

AW: Papierschneider eines POS Druckers ansteuern
 
Zitat:

Zitat von TurboMagic (Beitrag 1543988)
Ich hab' mir die Unit mal grob angeschaut. Das sind lauter Interface Deklarationen.
Mir fehlt jetzt nur noch, wie ich so eine Interface Referenz bekomme.

Da hilft ChatGPT z.B. weiter.

Zitat:

Zitat von TurboMagic (Beitrag 1543988)
Heutige POS Drucker sind aber auch für Grafikdruck schnell genug, d.h. ich würde eher eine Mischung
aus GDI Drucken und den Cut fähigen Interfaces dieser Unit bevorzugen.

Dann solltest du die WinRT Geschichten nicht verwenden. Ich habe das nur verlinkt, weil du es erwähnt hattest. Aber dann solltest du auch alles damit machen.

Escapesequenzen kann man mit der erwähnten control Schriftart schicken, aber man kann diese auch direkt an den Drucker schicken. Wenn du GDI verwenden möchtest, solltest du den Weg gehen.

TurboMagic 7. Dez 2024 15:16

AW: Papierschneider eines POS Druckers ansteuern
 
Ok! Danke mal soweit. Die WinRT Geschichten sind ja eher eine Umsetzung mittels Druckerschriftarten usw.
und damit nicht so flexibel. Da hast du dann sicherlicht recht: entweder diese so verwenden wie im API
dort angegeben oder gar nicht.

jaenicke 7. Dez 2024 15:55

AW: Papierschneider eines POS Druckers ansteuern
 
Du kannst natürlich auch auf eine TBitmap rendern und diese dann lediglich auf eine Zeichenfläche kopieren. Das hat den Riesenvorteil, dass du diese zu Debugzwecken auch speichern kannst. Und du kannst sie als Vorschau im Programm anzeigen. Ich habe das auch selbst so umgesetzt.

Mit diesem Bild kannst du dann jegliche Schnittstelle nutzen, egal ob du die WinRT Funktionalität, einen Delphi-TPrinter oder das XML-Format von Epson verwendest. Du musst lediglich vorher schauen welche native Auflösung der Drucker hat, damit dort nicht skaliert werden muss.


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