PHP een javascript bestand aan laten roep in cronjob

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ramon van Dongen

Ramon van Dongen

08/08/2015 13:44:50
Quote Anchor link
Ik heb het idee dat het niet kan, maar wellicht weet iemand van jullie een oplossing.

- Een cronjob (php) checkt in database of er nog niet geprinte keukenbonnen zijn (WHERE geprint = 0 bijvoorbeeld)
- Indien ja; roep een javascript bestand aan om te printen

Het javascript bestand zet dan een Epson TM-88V-i bonnenprinter in werking om te printen.

- Een cronjob instellen is geen probleem
- Database verhaal ook niet
- De printer laten printen met JS ook niet

... maar die cronjob dat js bestand aan laten roepen... kan dat?
 
PHP hulp

PHP hulp

28/03/2024 13:17:13
 
Thomas van den Heuvel

Thomas van den Heuvel

08/08/2015 14:05:10
Quote Anchor link
Als ik het goed begrijp kunnen die TM-printers via HTML/XML/JavaScript aangestuurd worden? Je zou een HTTP-request naar die printer kunnen sturen via Curl wellicht?

En als je echt JavaScript (en meer) wilt uitvoeren is node.js misschien iets, al heb ik daar verder geen ervaring mee.
 
Ramon van Dongen

Ramon van Dongen

08/08/2015 15:05:01
Quote Anchor link
Ik ga eens naar node.js kijken.

Als ik de cronjob php pagina in de browser open, werkt het wel gewoon.
Dus als tussenoplossing maar even in dat bestand
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<meta http-equiv="refresh" content="10" />
gezet.

Maar dan moet er dus wel constant een computer en browser open staan... nog niet ideaal maar het resultaat is nog even hetzelfde.
 
Thomas van den Heuvel

Thomas van den Heuvel

08/08/2015 15:58:50
Quote Anchor link
Mja, daar zat ik ook al naar te kijken, het printen wordt nu gefaciliteerd door / met behulp van de browser maar wellicht moet je dus naar een oplossing toe die de printer rechtstreeks aanstuurt, zonder tussenkomst van een browser.

In dat cheesy filmpje waar ik eerder naar linkte (~2:50) zat iets over een ePOS-Print API - had je daar al naar gekeken?

Omstreeks ~4:05 wordt ook iets gezegd over ingebouwde webserver met PHP-ondersteuning.
Gewijzigd op 08/08/2015 16:00:49 door Thomas van den Heuvel
 
Ramon van Dongen

Ramon van Dongen

08/08/2015 16:01:39
Quote Anchor link
Ja die had ik al eerder bekeken

HTML zeggen ze in dat filmpje maar verwijst elke keer naar toch een bestand met javascript erin.
XML heeft een bestand nodig van Epson online en ik wil het lokaal kunnen draaien

dus blijft javascript over

Dat werkt goed, echter nu met cronjob dus even een uitdaging

Ik ga er eens even goed over na denken.
 
Bart V B

Bart V B

08/08/2015 16:35:14
Quote Anchor link
Misschien niet DE oplossing, maar je kan een html/php pagina toch ook openen?
Mompelt iets van weget. Ik weet even zo niet exact de juiste opties die je moet meegeven aan de wget lijn.
 
Ikku Hier

Ikku Hier

08/08/2015 18:45:14
Quote Anchor link
Ramon,

Waarom aansturing via een javascript? Je kunt de printer ook aansturen direct vanuit een php programma.
 
Ramon van Dongen

Ramon van Dongen

08/08/2015 19:17:19
Quote Anchor link
En via welk script zou ik dat kunnen doen dan?

Voor zover ik kan vinden is het enkel mogelijk via XML (maar dan is er dus een bestand van Epson online nodig wat dus af valt) en Javascript.

Als je weet hoe, hoor ik het heel graag!
 
Stefan Fransen

Stefan Fransen

08/08/2015 20:31:15
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$printer
= "\\\\Pserver.php.net\\printername");
if($ph = printer_open($printer))
{

   // Get file contents
   $fh = fopen("filename.ext", "rb");
   $content = fread($fh, filesize("filename.ext"));
   fclose($fh);
        
   // Set print mode to RAW and send PDF to printer
   printer_set_option($ph, PRINTER_MODE, "RAW");
   printer_write($ph, $content);
   printer_close($ph);
}

else "Couldn't connect...";
?>
 
Ramon van Dongen

Ramon van Dongen

08/08/2015 20:34:54
Quote Anchor link
Ja, zo'n script ken ik. Alleen werkt de betreffende bonnenprinter daar niet mee.
Dat had inderdaad het probleem een stuk eenvoudiger gemaakt.
 
Ikku Hier

Ikku Hier

08/08/2015 21:18:42
Quote Anchor link
Ramon,

Dit is het een deel van het script wat ik hiervoor gebruik.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<?PHP
  $regel
   = array();
  
  $regel[1]  = "\x1B\x47\x31"."Naam     :   "."\x1B\x47\x30".$_SESSION['Naam']."\r\n";
  $regel[2]  = "\x1B\x47\x31"."Plaats   :   "."\x1B\x47\x30".$_SESSION['Plaats']."\r\n";
  $regel[3]  = "\r\n";
  $regel[4]  = "\x1B\x47\x31"."                      Aantal   Prijs"."\r\n";
  
  if (strlen($_SESSION['Aantalmet']) == 1)
  {

    $space1 = '    ';
  }

  else
  {
    $space1 = '   ';      
  }

  
  if (strlen($_SESSION['Aantalmetbedrag']) == 4)
  {

    $space2 = '       ';
  }

  else
  {
    if (strlen($_SESSION['Aantalmetbedrag']) == 5)
    {

      $space2 = '      ';
    }

    else
    {
      $space2 = '     ';
    }
  }

  
  $regel[5]  = "\x1B\x47\x31"."Aantal met         :"."\x1B\x47\x30".$space1.$_SESSION['Aantalmet'].$space2.$_SESSION['Aantalmetbedrag']."\r\n";
  
  if (strlen($_SESSION['Aantalzonder']) == 1)
  {

    $space1 = '    ';
  }

  else
  {
    $space1 = '   ';      
  }

  
  if (strlen($_SESSION['Aantalzonderbedrag']) == 4)
  {

    $space2 = '       ';
  }

  else
  {
    if (strlen($_SESSION['Aantalzonderbedrag']) == 5)
    {

      $space2 = '      ';
    }

    else
    {
      $space2 = '     ';
    }
  }

  
  $regel[6]  = "\x1B\x47\x31"."Aantal zonder      :"."\x1B\x47\x30".$space1.$_SESSION['Aantalzonder'].$space2.$_SESSION['Aantalzonderbedrag']."\r\n";
  
  if (strlen($_SESSION['OPmet']) == 1)
  {

    $space1 = '    ';
  }

  else
  {
    $space1 = '   ';      
  }

  
  if (strlen($_SESSION['OPmetbedrag']) == 4)
  {

    $space2 = '       ';
  }

  else
  {
    if (strlen($_SESSION['OPmetbedrag']) == 5)
    {

      $space2 = '      ';
    }

    else
    {
      $space2 = '     ';
    }
  }

  
  $regel[7]  = "\x1B\x47\x31"."Pas(sen) met       :"."\x1B\x47\x30".$space1.$_SESSION['OPmet'].$space2.$_SESSION['OPmetbedrag']."\r\n";
  
  if (strlen($_SESSION['OPzonder']) == 1)
  {

    $space1 = '    ';
  }

  else
  {
    $space1 = '   ';      
  }

  
  if (strlen($_SESSION['OPzonderbedrag']) == 4)
  {

    $space2 = '       ';
  }

  else
  {
    if (strlen($_SESSION['OPzonderbedrag']) == 5)
    {

      $space2 = '      ';
    }

    else
    {
      $space2 = '     ';
    }
  }

  
  $regel[8]  = "\x1B\x47\x31"."Pas(sen) zonder    :"."\x1B\x47\x30".$space1.$_SESSION['OPzonder'].$space2.$_SESSION['OPzonderbedrag']."\r\n";
  
  if (strlen($_SESSION['Totbedrag']) == 4)
  {

    $space1 = '                   ';
  }

  else
  {
    if (strlen($_SESSION['Totbedrag']) == 5)
    {

      $space1 = '                  ';
    }

    else
    {
      if (strlen($_SESSION['Totbedrag']) == 6)
      {

        $space1 = '                 ';
      }

      else
      {
            $space1 = '                ';
      }
    }
  }

  
  $regel[9]  = "\x1B\x47\x31"."Totaal bedrag".$space1.$_SESSION['Totbedrag']."\r\n";
  $regel[10] = "\r\n";
  $regel[11] = "\x1B\x47\x31"."Wandeldag          :  "."\x1B\x47\x30".$_SESSION['Wandeldag']."\r\n";
  $regel[12] = "\x1B\x47\x31"."Afstand            :  "."\x1B\x47\x30".$_SESSION['Afstand']."\r\n";
  $regel[13] = "\x1B\x47\x31"."Met medaille       :  "."\x1B\x47\x30".$_SESSION['Met']."\r\n";
  $regel[14] = "\x1B\x47\x31"."Zonder medaille    :  "."\x1B\x47\x30".$_SESSION['Zonder']."\r\n";
  
  // Totaal van de gevulde regels
  $totregels = 14;  
  
  if ($_SESSION['Met'] > 0)
  {

    $regel[15] = "\r\n";
    $regel[16] = "\x1B\x47\x31"."Medaille            Nummer   Aantal"."\r\n";
     $totregels = $totregels + 2;
    
    for ($i = 1; $i <= 12; $i++)
    {

      if (isset ($_SESSION['fmed'][$i])      &&
             $_SESSION['fmed'][$i] > '')
      {

        if (strlen($_SESSION['fmed'][$i]) == 1)
        {

          $space1 = '                       ';
        }

        else
        {
          $space1 = '                      ';
        }


        if (strlen($_SESSION['famed'][$i]) == 1)
        {

          $space2 = '        ';
        }

        else
        {
          $space2 = '       ';
        }

        
        $j = 16 + $i;
        $regel[$j] = $space1.$_SESSION['fmed'][$i].$space2.$_SESSION['famed'][$i]."\r\n";
         $totregels = $totregels + 1;
      }
    }
  }

  
  $regellast1 = "\r\n";
  $regellast2 = "\x1B\x47\x31"."    Wij wensen u een fijne wandeling"."\r\n";
  
  if ($_SESSION['fromaddr'] == '192.168.2.23' ||
      $_SESSION['fromaddr'] == '192.168.2.31' ||
      $_SESSION['fromaddr'] == '192.168.2.24' ||
      $_SESSION['fromaddr'] == '192.168.2.26')
  {

    $printer  = $_SESSION['printer'];
    $printer1 = $_SESSION['printer1'];
  }

  else
  {
    $printer  = $_SESSION['printer1'];
    $printer1 = $_SESSION['printer'];
  }

  
  $pp = @fsockopen($printer, 9100, $errno, $errstr, 10);

  if (!$pp)
  {

    $pp = @fsockopen($printer1, 9100, $errno, $errstr, 10);
  }

  
  if ($pp)
  {

    fwrite($pp, "\x1B\x40");
    
    for ($i = 1; $i <= $totregels; $i++)
    {

      fwrite($pp, $regel[$i]);
    }

    
    fwrite($pp, $regellast1);
    fwrite($pp, $regellast2);
    fwrite($pp, "\x0A\x0A\x0A\x1D\x56\x41");
    fwrite($pp, "\x1B\x40");
    fclose($pp);
  }

?>
 
Ramon van Dongen

Ramon van Dongen

08/08/2015 21:25:05
Quote Anchor link
Hoi Ikku Hier,

Bedankt, dat ga ik eens proberen.

Maar is dat ook voor de Epson TM-88V-i ?
 
Ikku Hier

Ikku Hier

08/08/2015 21:26:53
Quote Anchor link
Ik gebruik het ook voor een EPSON TM-88V.
Succes.
 
Ramon van Dongen

Ramon van Dongen

08/08/2015 21:28:26
Quote Anchor link
Dank je! Ik ga het proberen en hopen dat de -i variant het ook ondersteunt!
Gewijzigd op 08/08/2015 21:30:21 door Ramon van Dongen
 
Stefan Fransen

Stefan Fransen

09/08/2015 14:12:26
Quote Anchor link
Als je alleen printer_open(); gebruikt opent hij de default printer.
Dan moet et toch wel lukken?
 
Ramon van Dongen

Ramon van Dongen

11/08/2015 10:22:06
Quote Anchor link
Hallo Ikku Hier,

Ik krijg inderdaad een print zo uit de printer, ook de cutter wordt aangestuurd.
Geweldig!

Heel apart dat er niets over in de handleiding staat dat het ook met php kan.

Heb jij toevallig ergens een overzicht wat de codes betekenen zoals "\x1B\x40" ?

Dan kan ik namelijk daarop door gaan zoeken zoals voor de pulse voor een kassalade.

Toevoeging op 11/08/2015 12:18:34:

Blijkt dit dus te zijn: fwrite($pp, "\x1B\x70\x0\x100\x100");

Toevoeging op 11/08/2015 12:28:32:

Voor iemand anders die er ooit naar aan het zoeken is: http://content.epson.de/fileadmin/content/files/RSD/downloads/escpos.pdf
 

11/08/2015 16:01:17
Quote Anchor link
Gosh
code-bom
ifelseelseifififelse-hell
waterval php

Ik heb er geen andere woorden voor.
Tijd voor een refactor nadat het werkt ;)
 
Ramon van Dongen

Ramon van Dongen

11/08/2015 16:14:13
Quote Anchor link
Enkel met dit komt er al een bon uit met daarop: "Een regel tekst", maar dankzij het script van Ikku Hier.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$printer
  = '192.168.100.10'; // ip adres printer
$pp = fsockopen($printer, 9100); // verbinding met printer maken, openen

fwrite($pp, "\x1B\x40"); // clear buffer
fwrite($pp, "Een regel tekst"."\r\n");
fwrite($pp, "\x0A\x0A\x1D\x56\x41"); // op paar mm na cutten
fwrite($pp, "\x1B\x40"); // clear buffer

fclose($pp); // verbinding sluiten
?>


Een heel stuk simpeler en overzichtelijker dan wat dus standaard in de voorbeelden van de TM-88V-i meegeleverd wordt.
Gewijzigd op 11/08/2015 16:15:09 door Ramon van Dongen
 

11/08/2015 16:20:16
Quote Anchor link
Dat is al een stuk beter ja.
perfecto
 
Ozzie PHP

Ozzie PHP

11/08/2015 16:44:14
Quote Anchor link
Nog een klein beetje netter ...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$printer
      = fsockopen('192.168.100.10', 9100);
$clear_buffer = '\x1B\x40';
$break        = PHP_EOL;

fwrite($printer, $clear_buffer);
fwrite($printer, 'Een regel tekst' . $break);
fwrite($printer, '\x0A\x0A\x1D\x56\x41');
fwrite($printer, $clear_buffer);

fclose($printer);
?>
 
Ramon van Dongen

Ramon van Dongen

11/08/2015 16:47:03
Quote Anchor link
Wat ik me dan afvraag; zou het een reden hebben dat Epson alleen maar een omslachtige methode met Javascript of XML meelevert terwijl dit volgens mij veel stabieler is maar sowieso simpeler?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.