Aansturing POS printer vanuit PHP

Plaats reactie
joriz
Premium Member
Premium Member
Berichten: 548
Lid geworden op: 13 mei 2006, 22:36
Uitgedeelde bedankjes: 55 keer
Bedankt: 40 keer

Ik ben bezig met het uitwerken van een kleine PHP webpagina. De bedoeling is om via een simpele zoek functie data uit een database te halen en deze vervolgens te tonen op de webpagina. Deze functie is reeds werkend. Alleen moet de opgehaalde data ook af te printen zijn op een POS printer (point of sale). Dit zijn printers die je vaak bij kassa systemen ziet.
Deze printers zijn vaak aanstuurbaar op 2 manieren. Via een Windows driver, de driver doet de vertaling naar de printertaal. Of via Raw printing taal, de printertaal zal via de software (in dit geval php) direct naar de printer gestuurd worden.

In het geval van de raw printing optie moet de printer enkel geïnstalleerd worden op de server en niet op de client wat bij mij de voorkeur heeft.
Heeft iemand ervaring met het aansturen van printers vanuit PHP? Zijn er betere/eenvoudigere oplossingen?

Onderstaande code heb ik reeds kunnen uitwerken. De printer geeft aan dat er data ontvangen werd, maar er wordt totaal niets afgedrukt.

Code: Selecteer alles

<html>
<title>Test </title>
<body>

<?php
//open printer 
$handle = printer_open('\\\\server\printer1'); 

//set printing option to raw 
printer_set_option($handle, PRINTER_MODE, 'RAW'); 

//write data to printer
$data ='<SOF>TEST123<EOF>';

$ret = printer_write($handle, $data);
//close the printer handle 
printer_close($handle);

?>
</body>
</html>
Edpnet VDSL XL + Voip @ 100/35Mbit / Fritzbox 7490
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 446 keer
Bedankt: 1985 keer

Misschien wat vragen...

- Is UNC notatie mogelijk ?
- Moet je de stuurcodes niet hexadecimaal zetten ?
ITnetadmin
Elite Poster
Elite Poster
Berichten: 8445
Lid geworden op: 28 jan 2012, 18:22
Uitgedeelde bedankjes: 164 keer
Bedankt: 618 keer

Waarom 4 ipv 2 backslashes aan het begin van dat UNC path?

Also, is "write data to printer" genoeg, of moet je de print instructie mss nog apart meegeven?

[Afbeelding Post made via mobile device ]
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 446 keer
Bedankt: 1985 keer

ITnetadmin schreef:Waarom 4 ipv 2 backslashes aan het begin van dat UNC path?
Om de backslash te escapen veronderstel ik... maar dan moeten er verder in het path ook twee backslashen staan ipv 1.
joriz
Premium Member
Premium Member
Berichten: 548
Lid geworden op: 13 mei 2006, 22:36
Uitgedeelde bedankjes: 55 keer
Bedankt: 40 keer

- UNC notatie is geen probleem
- Zoals r2504 aanhaalde zijn de 4 backslashen in het begin om de backslashen te escapen. En inderdaad, ik was 1 backslash vergeten voor de printernaam, dit heb ik nu aangepast. --> Wel bizar dat in de printqueue toch een printopdracht toekwam met 1 backslash en de printer aangaf dat er data toekwam maar uiteindelijk niets wou afprinten.

- De data die naar de printer gestuurd moet worden komt via $data.

Ik denk dat ik hier puur met een syntax probleem zit.
Als test heb ik de printer via een seriele poort aangesloten, en zo via putty de print commands naar de printer verzonden. Label kwam er uit zonder problemen.

De data die ik verstuur is als volgt, na elke lijn komt een enter, vermoedelijk gaat het daar fout in de php code.

FT "Swiss 721 BT"
PT "ABCDEFGHIJKLM"
PF

FT = font type
PT = print text
PF = print file

Dit is wat ik stuur vanuit php:

$data ='FT "Swiss 721 BT"';
$data ='PT "ABCDEFGHIJKLM"';
$data ='PF';
Edpnet VDSL XL + Voip @ 100/35Mbit / Fritzbox 7490
elmariachi2920
Plus Member
Plus Member
Berichten: 162
Lid geworden op: 08 aug 2011, 17:09
Uitgedeelde bedankjes: 1 keer
Bedankt: 7 keer

als je $data elke keer gelijk stelt aan de tekst er achter zit er in $data enkel "PF"
ook staat er geen enter na

ik vermoed dat je code dit moet zijn:

$data='FT "Swiss 721 BT"\r\n';
$data+='PT "ABCDEFGHIJKLM"\r\n';
$data+='PF\';
ITnetadmin
Elite Poster
Elite Poster
Berichten: 8445
Lid geworden op: 28 jan 2012, 18:22
Uitgedeelde bedankjes: 164 keer
Bedankt: 618 keer

r2504 schreef:
ITnetadmin schreef:Waarom 4 ipv 2 backslashes aan het begin van dat UNC path?
Om de backslash te escapen veronderstel ik... maar dan moeten er verder in het path ook twee backslashen staan ipv 1.
Daar wou ik net op wijzen, als ie had geantwoord "om te escapen" ;-)

[Afbeelding Post made via mobile device ]
tb0ne
Elite Poster
Elite Poster
Berichten: 1017
Lid geworden op: 24 aug 2012, 11:49
Uitgedeelde bedankjes: 28 keer
Bedankt: 84 keer

elmariachi2920 schreef: ik vermoed dat je code dit moet zijn:

$data='FT "Swiss 721 BT"\r\n';
$data+='PT "ABCDEFGHIJKLM"\r\n';
$data+='PF\';
Was concateneren niet met punten? En moet je die dubbele quotes ook niet escapen?
Al een paar jaar geleden wel sinds ik nog iets van php gedaan heb...

Zoiets?

Code: Selecteer alles

$data='FT \"Swiss 721 BT\"\r\n';
$data=$data.'PT \"ABCDEFGHIJKLM\"\r\n';
$data=$data.'PF';
Tim.Bracquez
Elite Poster
Elite Poster
Berichten: 3202
Lid geworden op: 05 dec 2010, 15:09
Bedankt: 451 keer

PHP, dit is de juiste, de " moet je niet escapen als je met een ' start. Een . voor de = is om aan de var toe te voegen

Code: Selecteer alles

$data = 'informatie "klqds"';
$data .= 'klqsdfkq';
Testen kan ook hier: http://sandbox.onlinephpfunctions.com/c ... 276f0f8641
joriz
Premium Member
Premium Member
Berichten: 548
Lid geworden op: 13 mei 2006, 22:36
Uitgedeelde bedankjes: 55 keer
Bedankt: 40 keer

Bedankt, ik ga het testen.

Zijn er nog andere manieren op printers aan te sturen? Mijn kennis van PHP is hier te beperkt voor.
Om RAW printing te kunnen doen met de code hierboven is er de extensie php_printer nodig, deze is oud en dus ook niet meer supported. Laatste versie van PHP waar deze op draait is PHP 5.2.9.
Met deze PHP versie is het dan weer niet mogelijk om te connecteren met MSSQL 2012+.
Edpnet VDSL XL + Voip @ 100/35Mbit / Fritzbox 7490
Plaats reactie

Terug naar “Development”