Giter VIP home page Giter VIP logo

escpos-tools's Introduction

ESC/POS command-line tools Build Status

This repository provides command-line utilities for extracting information from binary ESC/POS data. ESC/POS is a page description language that is commonly used for receipt printing.

Currently we have a prototype ESC/POS parser, which can extract the commands contained in printable ESC/POS binary data, and render them to various formats.

Quick start

This project is requires:

  • PHP 5.6 or better
  • The mbstring and imagick extensions
  • composer

To install from source:

git clone https://github.com/receipt-print-hq/escpos-tools
cd escpos-tools
composer install

Included utilities

esc2text

esc2text extracts text and line breaks from binary ESC/POS files.

esc2html

esc2html converts binary ESC/POS files to HTML.

escimages

escimages extracts graphics from binary ESC/POS files in PBM and PNG format.

Contribute

Licensing

escpos-tools's People

Contributors

a-rotsaert avatar asoneji avatar klustor avatar mike42 avatar stenerson avatar welcomattic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

escpos-tools's Issues

Man pages

Duplicate the README pages in troff format for use as man pages.

This is a pre-requisite for OS-specific packaging.

Composer support

Hey,

It is not possible to load this package via composer at the moment because

  1. The package is not available via packagist
  2. The composer file does not define the package name.

Printing images

Hello,
We have a TM20II, connected to a debian server with USB.
We have some freeze event when printing images (gray level).
We change some image properties : resolution, size, etc
but sometimes, the printing freeze.
And when the image printing ik ok, we can see some blank lines.
Is there any buffer effects? Some characters/codes wich can freeze the printer?
We tried some 300 pixels width at 72 dpi (arround 200 pixels height). It seems that the problem is not so frequent. With some 500 pixels width images, it 1 freeze over 3 images.
Thank you for your help.
Didier

Command "GS 8 L" is not understood

This is another data command. It is the cause of most of the garbled output at #20, where it is used in place of the more common GS ( L.

This also needs to be understood by the parser.

Command "GS ( J" is not understood

Noted in #20 as a warning.

Cannot find this command mentioned in any programming guide, probably need to guess its length and discard it.

Relevant hexdump showing three usages of the command (Hex code 1d 28 4a)-

00000000  1b 3d 01 1d 28 4a 02 00  01 00 1d 28 4a 02 00 02  |.=..(J.....(J...|
00000010  00 1d 28 4a 02 00 03 00  1b 63 30 02 1b 63 31 02  |..(J.....c0..c1.|

Unable to generate Barcode

Unable to generate barcode while converting to html. Any light on how to achieve this is appreciated. Thanks

esc2text unexpected output

When I run esc2text on my binary file, I get the following output:

WARNING: Unknown command FS
PuTTYWARNING: Unknown command ESC W
WARNING: Unknown command ESC W
WARNING: Unknown command ESC W
WARNING: Unknown command ESC W
WARNING: Unknown command ESC W
WARNING: Unknown command ESC W
WARNING: Unknown command ESC W
WARNING: Unknown command ESC W
WARNING: Unknown command ESC FF
WARNING: Unknown command ESC S
WARNING: Unknown command GS FF
=~d@▒▒▒▒▒▒▒h▒ ▒▒:0▒UPh▒p▒▒▒x▒▒▒x9x\▒vxh▒p▒▒0▒▒0▒▒0▒▒0▒0▒)0▒@(▒L0▒g(x▒HQey0p▒▒▒HhhxHp6xQP▒k▒x▒H▒▒▒▒x▒7▒@


When I look at the binary, I can see alot of actual ESC/POS commands but in between it raster graphics. Is there something I am doing wrong to extract the text from this?

Thanks.

Write up issues

TODO for features to track.

  • images
  • anything else we need for html
  • composer stuff
  • packaging stuff

esc2html: Uncaught ImagickException: insufficient image data in file

This relates to the data file in issue #64.

We expect to get the text presented by esc2html in a HTML page (plus a pile of warnings), but instead it crashes with an ImagickException.

$ php esc2html.php examples/2019-10-ascii.txt  
WARNING: Unknown command DLE NUL
WARNING: Unknown command DLE �
WARNING: Unknown command DLE �
WARNING: Unknown command DLE �
WARNING: Unknown command DLE �
WARNING: Unknown command DLE !
WARNING: Unknown command DLE NUL
WARNING: Unknown command DLE A
WARNING: Unknown command DLE @
WARNING: Unknown command DLE !
WARNING: Unknown command DLE NUL
WARNING: Unknown command DLE A
WARNING: Unknown command DLE @
WARNING: Unknown command DLE !
WARNING: Unknown command DLE NUL
WARNING: Unknown command DLE !
WARNING: Unknown command DLE D
WARNING: Unknown command DLE @
WARNING: Unknown command DLE !
WARNING: Unknown command DLE NUL
WARNING: Unknown command DLE !
WARNING: Unknown command DLE D
WARNING: Unknown command DLE @
WARNING: Unknown command DLE 
WARNING: Unknown command DLE NUL
WARNING: Unknown command DLE �
WARNING: Unknown command DLE �
PHP Fatal error:  Uncaught ImagickException: insufficient image data in file `' @ error/pnm.c/ReadPNMImage/443 in /home/mike/workspace/escpos-tools/src/Parser/Command/StoreRasterFmtDataToPrintBufferGraphicsSubCmd.php:81
Stack trace:
#0 /home/mike/workspace/escpos-tools/src/Parser/Command/StoreRasterFmtDataToPrintBufferGraphicsSubCmd.php(81): Imagick->readimageblob('P4\n39107 49665\n...', 'pbm')
#1 /home/mike/workspace/escpos-tools/esc2html.php(101): ReceiptPrintHq\EscposTools\Parser\Command\StoreRasterFmtDataToPrintBufferGraphicsSubCmd->asPng()
#2 /home/mike/workspace/escpos-tools/esc2html.php(64): imgAsDataUrl(Object(ReceiptPrintHq\EscposTools\Parser\Command\StoreRasterFmtDataToPrintBufferGraphicsSubCmd))
#3 {main}
  thrown in /home/mike/workspace/escpos-tools/src/Parser/Command/StoreRasterFmtDataToPrintBufferGraphicsSubCmd.php on line 81

HTML output: Arbitrary height/width multiples

The SelectCharacterSizeCmd may request any height or width multiple up to 8x8. The text-size.bin example from escpos-php exercises this (screen capture from #15)-

screenshot from 2017-05-21 12-57-19

Correctly rendered, this should cause a large variety of heights and widths to be displayed.

Escimages: layout a bit off when combining .pbm

Hi,

I have an example where the output differs a bit from the input.
It cut the receipt a little bit short, like there needs to be a whiteline in between.
I have attached the .bin and combined .pbm files, and you should be able to see that under "soda" the dashes ---- are a little bit to high, making tesseract having trouble with that line.
Anything possible to avoid this ?
Tesseract output
.bin and .pbm files

esc2text output error

Hi,

I'm trying to capture the output send by an Epson tm-t20ii printer and converting that to text.
I am able to capture data with nc (or as i prefer a perl script).
When i try to print that file using "cat tmp.bin > /dev/usb/lp0" i get a correct looking receipt.
But when i try to run it through esc2text i get the following output :

Click to expand

pi@raspberrypi:~/pos/tmp $ cat output.txt
WARNING: Unknown command (J
WARNING: Unknown command (J
WARNING: Unknown command (J
WARNING: Unknown command P
WARNING: Unknown command 8
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command 0
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command 0
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command 0
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command 1 WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command B WARNING: Unknown command WARNING: Unknown command B WARNING: Unknown command WARNING: Unknown command B WARNING: Unknown command WARNING: Unknown command B WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command B WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command P WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command @ WARNING: Unknown command @ WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command @ WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command ? WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command ? WARNING: Unknown command ? WARNING: Unknown command WARNING: Unknown command ? WARNING: Unknown command WARNING: Unknown command ? WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command ? WARNING: Unknown command WARNING: Unknown command @ WARNING: Unknown command WARNING: Unknown command @ WARNING: Unknown command WARNING: Unknown command @ WARNING: Unknown command WARNING: Unknown command @ WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command WARNING: Unknown command ? WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command ?
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command `
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command 8
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command

WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command ?
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command
WARNING: Unknown command @
WARNING: Unknown command @
WARNING: Unknown command
WARNING: Unknown command ?

L?w0p018? @?<@? @???????B@???@??@???L?0|?????? @???@?8p@??????D???B??????|??????p ?,A????PcP??@@0???0B?? ??@@@<0@? ??@@@?0 ?? B????@@@?? ? B@@@?@ ? $@@@P@ @ $?? 0B@@p@ @ ???B@@?_???~??|?????? ????? @@@?@?@???????<?@???? D"A?? @???? @B??q???????? @BD???? ?@@BD??????@?D???0 @A(????00 ~(????0???@???0@@??? @ p? @??A?? @ ? 0?@???????>???? ???? ?????????@?@?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????>???????? @C?0@ @?? @b????@ @@? @b??B@ @@? @d?B@ @@bd? ?@ @@bd? P@ @?(? ?@ B(? @ @?B @ @b?@ @ @b?@ @ @b??? @ @b?A 8 0?@@?????σ?>??/???> ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@???>??????????????8 ? A? A@@ ?@@ ??? @?@@ @@?? @? @?@@ @@@? @? @?@@ @@@ ? @?@@ @@@ ? @?@@ @@@ ??????A@ @@@ ???@ @ @@@" ? B@ @@@? !@?? A@? @@? !@??@ @?@@ @@?@@ ????@ @?@@? ? A???p@ @@@????>?????_?????p????@??|??>??????????}?????? ??A ?? ? ? @?@???? @@? ??@???? @@!? ??? @@"? ??@? ?@
? @@$? P@E ? ?@ @@(? ?@E <?? @@6? @I ?? ?? @@!? ? @I ? @@ ?? ? H?? @@ @?A? P? ? @@? @?A? P? ?@? ? ??? P?? ?@??8??~????? @????????????@?????>???|??????????????? A??@? ? ?? @? @@? ??? @?! @@ ? @?! @@!B0 @? @ @@!B0@? @ @@"??? @@ @@?0?@@? @? @@?0 @? @ @@ ?
@? @ @@ !?
@ @? @ @@? !?@ @? ? ? ` !??p@@?? ?????
??
????_???????????

L,90p018???????????????????????????????????????????????????????????????????????????????????????????????????8|??>@ ??? ? ? @@@ ? @@?????? ? @@
?? ? @@?@ ? @@ @ ? @ ?? ? @ @ ? @ ?@?? @ ?@ ? @@????@ ??0A@?? ???9????>p??>??????| ??@0@@@?G? ? H@ @!P@?
??! 0 ! @ ? @ ? @@@? @ ?? ??9??|????????????????????????????????????????????????????????????????????????????????????????????????????|????>@ ??? @ ???? @0@? G?? ?H@? !P@? ?? ! ? 0 ! ? @ ? ? @ ?@?@ ? @0 ??? 0???8??>????????|? ??? ? @ ?| 0@? @ @ @@?? @0 @@ @@ @@@??? ???????8??|?|??????|? ?? ? ? ??> @@@A? G?@@?? ?H@@A@ !P@@A@? ! @A??! @A? A @?@? ? @!?@?? 0??p?|???

The file in question, comes from a working windows POS, setup using correct epson drivers.
When i compare the file to the receipt-with-logo.bin demo file, they seem to be totally different.
Making me think i need to convert this more before running it through esc2text ?
Any idea's ?

tmp.bin.zip

CSS pre-processing

We currently use a static CSS file, but this has two main problems-

  • Repetition: We will soon generate more height/width scaling classes, which is hard to maintain manually, but can be done easily with a few loops in Sass or similar.
  • Vendor prefixes: Output via wkhtmltopdf did not work as expected due to the lack of -webkit-* vendor tags for scaling. This can also be added via a pre-processor.

Which versions of PHP do we need this to work on?

We will need to introduce tests to avoid breaking supported PHP versions. The more versions we support, the more locked down we are on which dependencies, language features etc we can use.

At the time of writing, we have 5.6 and 7.0 being tested already, which does not include any versions outside of security update coverage.

Are we happy to adopt a practice of dropping compatibility with unsupported versions of PHP at each major release?

Is PHP 8.2 Supported? I get this error after upgrading - Uncaught Error: Undefined constant "ReceiptPrintHq\EscposTools\Parser\Command\STDERR

I have just upgraded my PHP to 8.2 and moved to a new server.

Would anyone be able to confirm that this should working on 8.2 or suggest a way to resolve this error? I just dont want to waste my time if it is not supposed to work.

Many Thanks.

Adam

[03-May-2024 20:31:58 UTC] PHP Fatal error: Uncaught Error: Undefined constant "ReceiptPrintHq\EscposTools\Parser\Command\STDERR" in /var/www/smartinsight_test/deva/SMART/httpdocs/vendor/escpos-tools/src/Parser/Command/Printout.php:189
Stack trace:
#0 /var/www/smartinsight_test/deva/SMART/httpdocs/vendor/escpos-tools/src/Parser/Command/Printout.php(154): ReceiptPrintHq\EscposTools\Parser\Command\Printout->logUnknownCommand()
#1 /var/www/smartinsight_test/deva/SMART/httpdocs/vendor/escpos-tools/src/Parser/Command/Printout.php(123): ReceiptPrintHq\EscposTools\Parser\Command\Printout->navigateCommand()
#2 /var/www/smartinsight_test/deva/SMART/httpdocs/vendor/escpos-tools/src/Parser/Parser.php(43): ReceiptPrintHq\EscposTools\Parser\Command\Printout->addChar()
#3 /var/www/smartinsight_test/deva/SMART/httpdocs/app/e-shop-pledge-action.php(55): ReceiptPrintHq\EscposTools\Parser\Parser->addString()
#4 /var/www/smartinsight_test/deva/SMART/httpdocs/app/e-shop-pledge-action.php(309): ReceiptToHtml()
#5 {main}
thrown in /var/www/smartinsight_test/deva/SMART/httpdocs/vendor/escpos-tools/src/Parser/Command/Printout.php on line 189

Extract UTF-8 text from a receipt

Currently, only ASCII will be correctly displayed when extracted a receipt.

The printers use a combination of legacy code-pages to represent text. We have a UTF-8 to legacy code page algorithm implemented in EscposPrintBuffer @ escpos-php, and need to write the inverse.

There is a CapabilityProfile being passed around, it should be possible to track the current code-page, and convert text back to UTF-8.

Eg, the TextContainer -> getText() method could have an extra argument added, containing the current code page, and then encode from there.

there is no bigger BULLSHIT than your programm

Since 2 days I try to install your stupid programm:
Why the fuck do I need some "composer" for your stupid programm.
2 fucking day lost just to install your bullshit.
You have a www folder. But no this fucker need some composer to install his bullshit.
FCK IDIOT.
Make things complicated that are easy.
Standalone innstallaiton is not possible:
no. THIS FUCKER needs some "Composer":
Go to hell with your compoer and your stupid software.

esc2html output error

Hi,
I'm trying to convert an ESCPOS binary file to HTML document.
when I run this command: php esc2html.php ascii.bin >output.html
I get errors:
error

this is the file ascii.bin
ascii.txt

HTML output: Double height text

Add example to repository that contains double-height text, and implement support double height text in HTML output.

On the same line, mixing widths should cause the text to be aligned to the baseline.

Composer issue : Failed to extract mike42/escpos-php

Hello,

I've installed composer and try to run composer install in escpos-tools directory but i fails everytime. I can't find much information online regarding this issue. Do you have any idea of what the problem is?

Failed to extract mike42/escpos-php: (12) unzip -qq -o '/home/escpos-tools/vendor/composer/tmp-028734732e7c980daaaa65ef1d064172' -d '/home/escpos-tools/vendor/composer/615da83c' `

error: invalid zip file with overlapped components (possible zip bomb)

esc2html encoding

I'm trying to convert my receipt to html just to be able to show rough version of receipt before/after printing. I'm using basically stock code from example but I have problems with diacritics řčúěžý... and some symbols like ×
for example instead of:

      $printer->text("  Výrobky s alkoholem na tomto dokladu");
      $printer->feed();
      $printer->text("     nejsou určeny k dalšímu prodeji,");
      $printer->feed();
      $printer->text("    ale výhradně ke konečné spotřebě.");

I get

  V∞robky s alkoholem na tomto dokladu
     nejsou urƒeny k dalτímu prodeji,
    ale v∞hradn╪ ke koneƒné spot²eb╪.

Text is printing fine on my printer.
I hope that I'm using dummy connector correctly:

  $connector = new Mike42\Escpos\PrintConnectors\DummyPrintConnector();
  $profile = Mike42\Escpos\CapabilityProfile::load("default");
  $printer = new Mike42\Escpos\Printer($connector, $profile);

I did try to add iconv('CP437', 'UTF-8... to:

if ($cmd -> isAvailableAs('TextContainer')) {
        // Add text to line
        // TODO could decode text properly from legacy code page to UTF-8 here.
        $spanContentText = $cmd -> getText();
        $lineHtml .= span($formatting, $spanContentText);
    }

But that just produced another garbled text instead of special symbols.
Maybe I overlooked something in documentation. Do you have any suggestion?

HTML output: Alternative font

Printers allow switching to a "Font B" and sometimes "Font C", which is slightly smaller.

Commands which affect the selected font include-

  • SelectPrintModeCmd (select A or B)
  • SelectFontCmd (Select A, B or C)
  • InitializeCmd (Reset to A).

Store these as inline formatting, implement CSS classes for font B and C, using a simple font-size switch.

HTML output: Emphasis

Implement emphasis ('bold') in the HTML output.

In the receipt-with-logo snippet, the Subtotal will appear to be darker when correctly rendered:

screenshot from 2017-05-20 13-58-50

HTML output: Alignment

Implement ESC a justification.

The receipt-with-logo example contains text which should appear in the center if it is rendered correctly.

screenshot from 2017-05-20 23-47-19

Add support for user-defined character sets

Example file: unifont-print-buffer.bin

This contains the text "Hello World", rendered with a user-defined character set.

2019-10-unifont-example

We first need to detect/skip these commands correctly, then add substitution characters, then finally the correct bitmaps. Size/orientation is not required to close this issue off.

$ php esc2text.php unifont-print-buffer.bin 
WARNING: Unknown command ESC %
WARNING: Unknown command ESC &
WARNING: Unknown command ESC &
WARNING: Unknown command ESC &
WARNING: Unknown command DLE 
WARNING: Unknown command ESC &
WARNING: Unknown command ESC %
WARNING: Unknown command ESC &
WARNING: Unknown command ESC &
WARNING: Unknown command ESC &
 ⁿÇÇÇÇⁿ !°DDDD╚!"""#°°#
$ⁿ0└└0ⁿ$#%ⁿÇ%"&&

Error with some png image

Hi I got error when I using some .png image when I want to convert to html (not all png image, but I don't know what different between the image that error and the image that not) . This the errors look like

php esc2html.php temp_print.bin > receipt-with-logo.html
PHP Fatal error: Uncaught ImagickException: UnableToReadImageData `' @ error/pnm.c/ReadPNMImage/1319 in C:\xampp\htdocs\MyProject\public\escpos-tools-master\src\Parser\Command\StoreRasterFmtDataToPrintBufferGraphicsSubCmd.php:81
Stack trace:
#0 C:\xampp\htdocs\MyProject\public\escpos-tools-master\src\Parser\Command\StoreRasterFmtDataToPrintBufferGraphicsSubCmd.php(81): Imagick->readimageblob('P4\n764 830\n\x00\x00\x00\x00...', 'pbm')
#1 C:\xampp\htdocs\MyProject\public\escpos-tools-master\esc2html.php(59): ReceiptPrintHq\EscposTools\Parser\Command\StoreRasterFmtDataToPrintBufferGraphicsSubCmd->asPng()
#2 {main}
thrown in C:\xampp\htdocs\MyProject\public\escpos-tools-master\src\Parser\Command\StoreRasterFmtDataToPrintBufferGraphicsSubCmd.php on line 81

Thank you!

HTML output: Support underline & double underline

Add example of underlined text to the repository, and render underline modes to HTML.

Commands that affect the formatting of underlined text include:

  • InitializeCmd (reset to OFF)
  • SelectPrintModeCmd (set to OFF or single)
  • EnableUnderlineCmd (set to OFF, single, or double underline)

Extract Graphics from a receipt

Receipts can contain raster images in a number of formats. The example file in the repository contains an image represented by two GraphicsDataCmd calls (one to set the buffer, one to trigger the print).

Other than the header, this format is identical to the binary pbm (P4) file, so we can extract this data without any image libraries.

Create a new script (could name it escimages in the spirit of pdfimages) which locates GraphicsDataCmd calls, extracts PBM data, and writes out an a PBM file for each image.

This is the opposite of the task performed in graphics() in escpos-php.

Add support for upside-down, black-white invert printing modes

There is an example file online here which produces buggy output, because these tools do not recognise ESC { and GS B.

$ php esc2text.php My_receipt.bin 
WARNING: Unknown command GS B
WARNING: Unknown command GS B
WARNING: Unknown command ESC {
WARNING: Unknown command ESC {
...

To fix this:

  • Add ESC { and GS B to parser so that esc2text can read past these commands correctly.
  • Add black/white invert printing to esc2html.
  • Add upside-down printing output in esc2html.

Set output dir for escimages

Could it be possible to set the output dir for escimages ?
It would remove the need to cd in the correct dir before running escimages.php

Encoded characters in decoded output

@mike42 I'm using your library to decode the ESC/POS printer windows spool file. It works well for most inputs.
I came across one binary file which causes output of garbled characters like this. I verified that it contains ESC/POS commands, its just that the text output is garbled.

attached

The windows spool file was generated by a thermal receipt printer while printing a grocery bill at a supermarket.

Here's the zipped binary causing the issue, looking forward for a suggestion to get usable text output.

HTML output: Double width text

Implement double-width text in HTML output.

In the receipt-with-logo snippet, these lines would be the same width if correctly rendered-

screenshot from 2017-05-20 13-56-23

fopen(/tmp/test.bin): failed to open stream: No such file or directory

I've been trying to test in escpos using Laravel framework.

use Mike42\Escpos\PrintConnectors\FilePrintConnector;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
use Mike42\Escpos\Printer;

public function store()
{
    $connector = new FilePrintConnector("/tmp/test.bin"); //this code
    $printer = new Printer($connector);
    $printer -> cut();
    $printer -> close(); 
}        

It produced an error fopen(/tmp/test.bin): failed to open stream: No such file or directory. I don't have any idea on how to fix this if it is in laravel or in escpos.

Add Docker support

It could be usefull to have this great tool packaged in a docker image.

I can make a pull request, I have a Dockerfile ready for this.

Print Margin on Top

I am getting margin on top. Printer model RP-76II Rongta any idea how to solve this?

Add contributing guide

As a collaborator
I want a contributor guide
To improve the chance of getting quality pull requests

Unable to generate with Esc2html

Hi, I get this error when using Mike42 - esc2html

D:\xampp\htdocs\escpos-tools>php esc2html.php receipt-with-logo.bin > output.html
PHP Fatal error:  Uncaught TypeError: implode(): Argument #2 ($array) must be of type ?array, string given in D:\xampp\htdocs\escpos-tools\esc2html.php:63
Stack trace:
#0 D:\xampp\htdocs\escpos-tools\esc2html.php(63): implode(Array, ' ')
#1 {main}
  thrown in D:\xampp\htdocs\escpos-tools\esc2html.php on line 63

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.