How to Print Unsupported Character Sets with a POS Printer: Difference between revisions

From wizarPOS
(No difference)

Revision as of 13:37, 22 December 2023

POS Printer Character Set Support

Overview:

The POS printer is equipped to support the GB2312 character set by default, which is predominantly used for simplified Chinese characters. Additionally, it accommodates various Latin character sets, including but not limited to ISO8859-1.

Changing Character Sets:

To modify the printer's character set, developers can implement ESC (Escape) commands. Detailed guidance on using these commands is available at the SDK Wiki: [ESC Commands Documentation].

Advanced Printing Options Using HTML

Context:

In scenarios where the default character sets do not meet your requirements, or if you desire a more aesthetically pleasing font, printing via HTML content is a viable option.

Implementing HTML Printing:

To enable HTML printing, the following steps are required:

  1. WebView Configuration:
    • Integrate the WebView.enableSlowWholeDocumentDraw() method into your application's source code. This step is crucial as the printing functionality utilizes Android WebView to process HTML content for printing.
  2. Permission Requirements:
    • Your application must declare the android.permission.SYSTEM_ALERT_WINDOW permission in its manifest file. This permission is essential for the printHTML utility to effectively render windows using off-screen HTML content.

Java SDK API

API Overview

printHTML

void printHTML(Context context, String htmlContent, PrinterHtmlListener listener) throws DeviceException;

Print html content, add WebView.enableSlowWholeDocumentDraw() in the calling app, and add this permission android.permission.SYSTEM_ALERT_WINDOW in manifest file.

Parameters
context Context: context.
htmlContent String: html content.
listener PrinterHtmlListener: PrinterHtmlListener.

convertHTML2image

void convertHTML2image(Context context, String htmlContent, PrinterHtmlListener listener) throws DeviceException;

convertHTML2image, add WebView.enableSlowWholeDocumentDraw() in the calling app, and add this permission android.permission.SYSTEM_ALERT_WINDOW in manifest file.

Parameters
context Context: context.
htmlContent String: html content.
listener PrinterHtmlListener: PrinterHtmlListener.

PrinterHtmlListener.onGet

void onGet(Bitmap bitmap, int errorCode);
Parameters
bitmap Bitmap : generated bitmap.
errorCode int: returned value:PRINT_ERROR = 0;PRINT_SUCCESS = 1;BITMAP_ERROR = 2;BITMAP_SUCCESS = 3;DEVICE_NOT_OPEN = 4.

PrinterHtmlListener.onFinishPrinting

void onFinishPrinting(int errorCode);
Parameters
errorCode int: returned value:PRINT_ERROR = 0;PRINT_SUCCESS = 1;BITMAP_ERROR = 2;BITMAP_SUCCESS = 3;DEVICE_NOT_OPEN = 4.

Sample with Java SDK API

Please refer to java API Spec. Download API demo 1.5.3.071, there is a printHtml method in com.wizarpos.apidemo.action.PrinterAction.java, you can call it like this:

    public void printHtml(final Map<String, Object> param, final ActionCallback callback) {
        try {
            final String htmlContent = "<!DOCTYPE html>" +
                    "<html>" +
                    "<head>" +
                    "    <style type=\"text/css\">" +
                    "     * {" +
                    "        margin:0;" +
                    "        padding:0;" +
                    "     }" +
                    "    </style>" +
                    "</head>" +
                    "<body>" +
                    "Demo receipts<br />" +
                    "MERCHANT COPY<br />" +
                    "<hr/>" +
                    "MERCHANT NAME<br />" +
                    "SHXXXXXXCo.,LTD.<br />" +
                    "530310041315039<br />" +
                    "TERMINAL NO<br />" +
                    "50000045<br />" +
                    "OPERATOR<br />" +
                    "50000045<br />" +
                    "<hr />" +
                    "CARD NO<br />" +
                    "623020xxxxxx3994 I<br />" +
                    "ISSUER ACQUIRER<br />" +
                    "<br />" +
                    "TRANS TYPE<br />" +
                    "PAY SALE<br />" +
                    "PAY SALE<br />" +
                    "<hr/>" +
                    "DATE/TIME EXP DATE<br />" +
                    "2005/01/21 16:52:32 2099/12<br />" +
                    "REF NO BATCH NO<br />" +
                    "165232857468 000001<br />" +
                    "VOUCHER AUTH NO<br />" +
                    "000042<br />" +
                    "AMOUT:<br />" +
                    "RMB:0.01<br />" +
                    "<hr/>" +
                    "BEIZHU<br />" +
                    "SCN:01<br />" +
                    "UMPR NUM:4F682D56<br />" +
                    "TC:EF789E918A548668<br />" +
                    "TUR:008004E000<br />" +
                    "AID:A000000333010101<br />" +
                    "TSI:F800<br />" +
                    "ATC:0440<br />" +
                    "APPLAB:PBOC DEBIT<br />" +
                    "APPNAME:PBOC DEBIT<br />" +
                    "AIP:7C00<br />" +
                    "CUMR:020300<br />" +
                    "IAD:07010103602002010A01000000000005DD79CB<br />" +
                    "TermCap:EOE1C8<br />" +
                    "CARD HOLDER SIGNATURE<br />" +
                    "I ACKNOWLEDGE SATISFACTORY RECEIPT OF RELATIVE GOODS/SERVICE<br />" +
                    "I ACKNOWLEDGE SATISFACTORY RECEIPT OF RELATIVE GOODS/SERVICE<br />" +
                    "I ACKNOWLEDGE SATISFACTORY RECEIPT OF RELATIVE GOODS/SERVICE<br />" +
                    "<br />" +
                    "Demo receipts,do not sign!<br />" +
                    "<br />" +
                    "<br />" +
                    "<br />" +
                    "</body>" +
                    "</html>";
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    try {
                        device.printHTML(mContext, htmlContent, null);
                        sendSuccessLog(mContext.getString(R.string.operation_succeed));
                    } catch (Exception e) {
                        sendFailedLog(mContext.getString(R.string.operation_failed));
                    }
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            sendFailedLog(mContext.getString(R.string.operation_failed));
        }
    }

JNI API wrapper with C SDK

API Overview

PrintHtmlInterface.printHTML

void printHTML(Context context, String htmlcontent, PrinterHtmlListener listener);

Print HTML content.

Returns
context Context : The activity or application context of the APP. It's used by method to create the hidden window.
htmlcontent String : The HTML content for printing.
listener PrinterHtmlListener : the callback listener to process the print result, Not null.

PrintHtmlInterface.convert2Image

void convert2Image(Context context, String htmlContent, PrinterHtmlListener listener);

Convert the html content to a image, if want print, please call print API of the printer.

Returns
context Context : The activity or application context of the APP, Not null.
htmlcontent String : The html content, Not null.
listener PrinterHtmlListener : the callback listener to process the print result, Not null.

PrinterHtmlListener.onGet

void onGet(Bitmap returbitmap, int result);

This callback will return the bitmap if you invoke the convert2Image method of the PrintHtmlInterface.

Returns
returbitmap Bitmap : The returned bitmap.
result int: The result of get image, "2:" BITMAP_ERROR, "3:" BITMAP_SUCCESS.

PrinterHtmlListener.onFinishPrinting

void onFinishPrinting(int result);

This callback will be callled after printing if you invoke the printHTML method of the PrintHtmlInterface.

Returns
result int : The result of the print,"0:" PRINT_ERROR, "1:" PRINT_SUCCESS,"2:" BITMAP_ERROR, "3:" BITMAP_SUCCESS,"4:" DEVICE_NOT_OPEN.

Sample with JNI API

Please download the API demo 1.5.2