Add custom images
-
I’d like to print the orders with my custom image, for example store logo, QR code and more.
Is it possible to make it happen?
If you have any sample code or infomation, I’d love to hear it.
Thank you.
-
There are a few possible solutions for this.
You can use Star utilities to pre-store images into the Printer FlashROM (255 or more, depending on printer model) and trigger these with a logo command. This is the fastest printing method, and definitely recommended if the images will not change very often (like a store logo).
I’ve been looking in to printing images from the WordPress media library. To do this, iw would be necessary to use an image manipulation library like GD, to read the image pixel data and convert it into the printer graphic printing commands. I can share with you code I’ve written in C++ or C# to do this, but haven’t tried with php yet. Depending on your environment, I can also share with you a Linux command line utility that will convert images into printer command data, or support the Star Markup Document language. I cant use this in a general purpose WordPress plugin, but if you are happy to install the cputil utility on your servers then you can use it in your own variant.
You might also want to have a look at the Star PromoPRNT system, which will let you remotely manage end-of document coupons and graphics on your printers using Star Micronics Cloud Services.
Finally, if your priority is a QR Code, the printers do have built-in Qr Code printing, I can help you with an extension to the printer control classes to print a Qr.
Thank you for your information.
> Finally, if your priority is a QR Code, the printers do have built-in Qr Code printing, I can help you with an extension to the printer control classes to print a Qr.
Now, my top priority is a QR Code, could you tell me how to use the extension?
For now, I’m trying CPUtil you told me about.
Using this page as a reference, I was able to install the command, but I still don’t know how to use it from the plugin.
https://cloudprnt.net/CloudPRNTSDK/Documentation/articles/cputil/cputil.htmlI found that I can generate binary data from an image with the following command, but how can I use that data from the plugin?
cputil thermal2 dither scale-to-fit decode application/vnd.star.starprnt barcode.png outputdata.bin
For example, I would like to print additional barcode data for each product below the product items on the current receipt.
I would appreciate it if you could let me know.
Thank you.
-
This reply was modified 3 years, 12 months ago by
Ko Takagi.
@ko31 Sorry, I should have mentioned that there is not an existing integration with cputil. Although I would really love to use the Star Document Document Markup Language (SDML) for generating print jobs, it is just impractical for a typical WordPress site to expect them to install cputil.
There are lots of ways you could potentially use cputil, but my suggested integration would require the following modifications:
generate the receipt data using SDML instead of using the $printer object. This makes it easy to include images and QrCodes in your document.
use php to call cputil as a a local process to convert the SDML data into printer native binary data
store that converted data in the plugins print queue folderThe printer would then pick up and print the document that was generated from an SDML.
This is quite a significant modification, I only suggest it at all because I know that you are a developer.
I hope, today to be able to provide an example of adding QrCode printing support to the $printer object, which is probably quicker/easier for you?
Thank you for helping.
I’ll look into the way of using SDML that you mentioned.
> I hope, today to be able to provide an example of adding QrCode printing support to the $printer object, which is probably quicker/easier for you?
If you can tell me how to do that as well, that would be great. It might help us solve the problem faster.??
-
This reply was modified 3 years, 12 months ago by
Ko Takagi.
Try adding the following function to both “cloudprnt/printer_star_line.inc.php” and “cloudprnt/printer_star_prnt.inc.php”.
public function add_qr_code($error_correction, $cell_size, $data) { $model = 2; if($error_correction < 0) $error_correction = 0; if($error_correction > 3) $error_correction = 3; if($cell_size < 1) $cell_size = 1; if($cell_size > 8) $cell_size = 8; $data_length = strlen($data); $set_model = sprintf("1B1D795330%02X", $model); $set_error_level = sprintf("1B1D795331%02X", $error_correction); $set_cell_size = sprintf("1B1D795332%02X", $cell_size); $set_data_prefix = sprintf("1B1D79443100%02X%02X", fmod($data_length, 256), intval($data_length / 256)); $print = "1B1D7950"; $this->printJobBuilder .= $set_model . $set_error_level . $set_cell_size . $set_data_prefix . $this->str_to_hex($data) . $print; }
Then you can call
$printer->add_qr_code($error_correction, $cell_size, $data)
from within your order-handler.php.- $error_correction indicates how much error correction information to add to the Qr, from 0 (lowest) to 3(maximum). More error correction increases the size of the Qr.
- $cell_size is the size in printer dots (1/8mm) of a single dot/module of the Qr.
- $data is a string containing the data you want to encode. The printer will choose the most efficient data encoding method automatically.
That’s great! I tried it and was able to print QrCode.
I’m grateful to you.
If possible, could you please tell me how to print JAN13 (EAN13) as well?
Yes, the following function, added to the same files will give you a 2D barcode printing method.
public function add_barcode($type, $module, $hri, $height, $data) { $n2 = 1; $n3 = 1; if($type < 0 || $type > 13) return; // Invalid barcode type if($hri) $n2 = 2; // Print human-readable characters under the bacrode if($type == 0 || $type == 1 || $type == 3 || $type == 4 || $type == 6 || $type == 7) // UPC-E, UPC-A, JAN/EAN8, JAN/EAN13, Code128, Code 93 { $n3 = $module - 1; if($n3 < 1) $n3 = 1; if($n3 > 3) $n3 = 3; } elseif ($type == 4 || $type == 5 || $type == 8) // Code 93, ITF, NW-7 { $n3 = $module; if($n3 < 1) $n3 = 1; if($n3 > 9) $n3 = 9; } elseif ($type >= 9 && $type <= 13) // GS1-128, GS1 DataBar { $n3 = $module; if($n3 < 1) $n3 = 1; if($n3 > 6) $n3 = 6; } if($height < 8) $height = 8; // Minimum 1mm height if($height > 255) $height = 255; // Max 32mm height $print_bc = sprintf("1B62%02X%02X%02X%02X", $type, $n2, $n3, $height) . $this->str_to_hex($data) . "1E"; $this->printJobBuilder .= $print_bc; }
- $type is the barcode type where – 0: UPC-E, 1: UPC-A, 2: JAN/EAN8, 3: JAN/EAN13, 4:Code 39, 5: ITF, 6:Code128, 7:Code93, 8:NW7, 9:GS1-128, 10 GS1 DataBar (Omnidirectional, 11: GS1 DataBar (Truncated) 12: GS1 DataBar (Limited), 13: GS1 Databar (Expanded)
- $module is the width of the barcode bars, this parameter varies depending on the barcode type, for EAN13 it can be a value from 2 to 4 and represents the base module size in printer dots (1/8mm).
- $hri set to true to print the human readable data value underneath the barcode
- $height is the height of the barcode in 1/8mm printer dots, maximum 255.
- $data is the barcode data – it is your responsibility to ensure that the data is valid for the requested barcode type. For JAN/EAN13 that means 12 or 13 numeric digits.
Great code! I was able to print 2D barcode.
Thank you so much for your help as always.??
I really appreciate it. Thanks a million!
-
This reply was modified 3 years, 12 months ago by
- The topic ‘Add custom images’ is closed to new replies.