es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede imprimir en árabe en la impresora Xprinter XP-P810 utilizando Android Studio.

Estoy intentando imprimir una cadena que contiene caracteres árabes, pero cuando lo imprimo, el papel está en blanco.

Aquí está el código que escribí:

    try {

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BLUETOOTH}, InvoiceActivity_AR.PERMISSION_BLUETOOTH);

        } else {

            BluetoothConnection connection = BluetoothPrintersConnections.selectFirstPaired();

            if (connection != null) {

                EscPosPrinter printer = new EscPosPrinter(connection, 203, 78f, 48);

                final String text = "[C]شركة الحياة";

                printer.printFormattedText(text);
            } else {
                Toast.makeText(this, "¡No se ha conectado ninguna impresora!", Toast.LENGTH_SHORT).show();
            }
        }
    } catch (Exception e) {
        Log.e("APP", "No se puede imprimir", e);
    }

Al principio pensé que esta impresora no admite árabe. Pero intenté imprimir desde una aplicación de texto y funcionó normalmente.

Estoy usando este plugin:
https://github.com/DantSu/ESCPOS-ThermalPrinter-Android

Por favor, ayúdame a solucionarlo.

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en la codificación de los caracteres árabes. Las impresoras ESC/POS suelen utilizar una codificación específica llamada Code Page 1252, que no admite caracteres árabes.

    Una forma de resolver este problema es convertir el texto árabe en una imagen e imprimir la imagen en lugar de imprimir el texto directamente. Puedes utilizar una biblioteca como Bitmap-To-Printer para convertir el texto en una imagen y luego imprimirlo utilizando el mismo complemento.

    Aquí tienes un ejemplo de fragmento de código:

    `java
    try {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BLUETOOTH}, InvoiceActivity_AR.PERMISSION_BLUETOOTH);
    } else {
    BluetoothConnection connection = BluetoothPrintersConnections.selectFirstPaired();

        if (connection != null) {
            EscPosPrinter printer = new EscPosPrinter(connection, 203, 78f, 48);
    
            final String text = "شركة الحياة";
            Bitmap bitmap = Bitmap.createBitmap(384, 100, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            canvas.drawColor(Color.WHITE);
            Paint paint = new Paint();
            paint.setColor(Color.BLACK);
            paint.setTextSize(30);
            canvas.drawText(text, 0, 50, paint);
    
            byte[] command = BitmapUtils.decodeBitmap(bitmap);
            printer.printBytes(command);
        } else {
            Toast.makeText(this, "¡No se ha conectado ninguna impresora!", Toast.LENGTH_SHORT).show();
        }
    }
    

    } catch (Exception e) {
    Log.e(“APP”, “No se puede imprimir”, e);
    }
    Este código convierte el texto árabe en una imagen Bitmap y luego imprime la imagen utilizando el métodoprintBytes` del objeto de la impresora.

    ¡Espero que esto te ayude!

Comments are closed.