Hi,
ich habe da vielleicht einen spezial Fall und hoffe das hier wieder ein paar schlaue Köpfe sind die mehr davon verstehen als ich derzeit.
Ich verwende für eine App diesen "Treiber" github.com/KevinGong2013/Printer für einen Epson ESC/POS Drucker. Dieser macht nichts anderes als einen Bestell Bon auszudrucken. Der Drucker ist per LAN angeschlossen und der Druck kommt von einem iPad über WLAN.
(Wenn man keinen ECS/POS Drucker hat, kann man das hiermit testen: github.com/dacduong/escpos-printer-simulator)
Ich habe es mir nun soweit zurecht gefummelt das es zu 99,9% korrekt läuft aber ich habe noch 2 Probleme:
Alles anzeigen
Ich vermute, da es sich hier um einen asynchronen Aufruf handelt (stimmt das?), das manchmal die Laufzeit zu lange ist und evtl. der Netzwerkstack den Druck noch mal los sendet (kann das sein??)
2. Ich würde gerne den Bon mehrzeilig dynamisch zusammen bauen, je nach dem ob jemand 1 oder 2 oder 15 Essen bestellt hat. Derzeit ist es so, das ich dem Bon 15 Zeilen hinzufügen müsste und die mit keinem Text füllen müsste um dies hinzubekommen, da ich nicht weiß wie ich bei der Erstellung des Bon eine Schleife eingebaut bekomme
Derzeit sieht meine Funktion dazu so aus:
Alles anzeigen
Sobald ich hier eine Schleife einbaue gibts eine Fehlermeldung. Ich verstehe auch nicht was dieses "<<~" und "<<-" und "<<<" machen. Nach ersten Recherchen geht es hier um irgenwelche Bits die hin und hergeschoben werden. Das ist mir aber ehrlich gesagt zu hoch.
Ich hoffe sehr, das das jemand mehr versteht als ich und mir einen guten Rat geben kann.
Grüße
Dirk
ich habe da vielleicht einen spezial Fall und hoffe das hier wieder ein paar schlaue Köpfe sind die mehr davon verstehen als ich derzeit.
Ich verwende für eine App diesen "Treiber" github.com/KevinGong2013/Printer für einen Epson ESC/POS Drucker. Dieser macht nichts anderes als einen Bestell Bon auszudrucken. Der Drucker ist per LAN angeschlossen und der Druck kommt von einem iPad über WLAN.
(Wenn man keinen ECS/POS Drucker hat, kann man das hiermit testen: github.com/dacduong/escpos-printer-simulator)
Ich habe es mir nun soweit zurecht gefummelt das es zu 99,9% korrekt läuft aber ich habe noch 2 Probleme:
- Manchmal kommt ein Bon doppelt heraus, obwohl ich immer nur einmal einen Druck los sende.
Das ist meine Funktion die aufgerufen wird sobald ich den die Daten für den Bon zusammen habe
Quellcode
- func sendPrint(bon:Receipt, casenumber:Int64) {
- let printerIP = UserDefaults.standard.string(forKey: "printeripadress_preference") ?? ""
- let printerPort = UserDefaults.standard.string(forKey: "printerport_preference") ?? ""
- let host:NWEndpoint.Host = .init(printerIP)
- let port:NWEndpoint.Port = .init(integerLiteral: UInt16(printerPort) ?? 9100)
- let tcp = NWProtocolTCP.Options.init()
- tcp.noDelay = true
- let params = NWParameters.init(tls: nil, tcp: tcp)
- let connection = NWConnection(to: NWEndpoint.hostPort(host: host, port: port), using: params)
- connection.stateUpdateHandler = { newState in
- switch newState {
- case .ready:
- print("[MyDebug] Socket State: Ready")
- print("[MyDebug] send data")
- let content: Data = Data(bon.data)
- connection.send(content: content, contentContext: .defaultMessage, completion: NWConnection.SendCompletion.contentProcessed(({ NWError in
- if (NWError == nil) {
- print("[MyDebug] Data was sent to TCP destination ")
- connection.cancel()
- } else {
- print("[MyDebug] ERROR! Error when data (Type: Data) sending. NWError: \n \(NWError!)")
- }
- })))
- case .failed(let error):
- print("[MyDebug] Fatal connection error", error.localizedDescription)
- default:
- break
- }
- }
- connection.start(queue: DispatchQueue.main)
- markCheckInAsPrinted(casenumber: casenumber)
- }
2. Ich würde gerne den Bon mehrzeilig dynamisch zusammen bauen, je nach dem ob jemand 1 oder 2 oder 15 Essen bestellt hat. Derzeit ist es so, das ich dem Bon 15 Zeilen hinzufügen müsste und die mit keinem Text füllen müsste um dies hinzubekommen, da ich nicht weiß wie ich bei der Erstellung des Bon eine Schleife eingebaut bekomme
Derzeit sieht meine Funktion dazu so aus:
Quellcode
- let bon = Receipt(.init(maxWidthDensity: 500, fontDensity: 12, encoding: .windowsCP1252))
- bon <<~ .style(.clear)
- <<~ .style(.initialize)
- <<~ .style(.selectPrintMode(.doubleHeight))
- <<~ .style(.selectsCharacterFont(.a))
- <<~ .layout(.justification(.center))
- <<~ .page(.printAndFeed(lines: 5))
- <<< Dividing.default()
- <<~ .page(.printAndFeed(lines: 1))
- <<< "\(date)"
- <<~ .page(.printAndFeed(lines: 1))
- <<< Dividing.default()
- <<~ .page(.printAndFeed(lines: 1))
- <<~ .style(.emphasis(enable: true))
- <<< umlautConverter(text: specialDiet)
- <<< umlautConverter(text: note[i])
- <<~ .style(.emphasis(enable: false))
- <<~ .page(.printAndFeed(lines: 2))
- <<~ .style(.underlineMode(.enable2dot))
- <<< KVItem("Menue", "Dessert")
- <<~ .style(.clear)
- <<~ .style(.selectPrintMode(.doubleHeight))
- <<~ .style(.selectsCharacterFont(.a))
- <<~ .layout(.justification(.center))
- <<< KVItem("\(menuDecoder(from: menu[i]))", boolEncoder(value: dessert[i]))
- <<~ .page(.printAndFeed(lines: 1))
- <<< Dividing.default()
- <<~ .page(.printAndFeed(lines: 1))
- <<~ .style(.emphasis(enable: true))
- <<< umlautConverter(text: name)
- <<~ .style(.emphasis(enable: false))
- <<~ .page(.printAndFeed(lines: 10))
- <<~ .style(.clear)
- <<~ .page(.partialCut)
- sendPrint(bon: bon, casenumber: casenumber)
Sobald ich hier eine Schleife einbaue gibts eine Fehlermeldung. Ich verstehe auch nicht was dieses "<<~" und "<<-" und "<<<" machen. Nach ersten Recherchen geht es hier um irgenwelche Bits die hin und hergeschoben werden. Das ist mir aber ehrlich gesagt zu hoch.
Ich hoffe sehr, das das jemand mehr versteht als ich und mir einen guten Rat geben kann.
Grüße
Dirk