从Android应用程序打印标签到蓝牙热敏打印机

kd3sttzy  于 2023-04-28  发布在  Android
关注(0)|答案(1)|浏览(194)

我尝试从Android应用程序将标签打印到我的蓝牙热敏打印机。我设法打印文本,但我无法指定标签的大小
我的材料:

我的打印机可以检测标签。例如,当我装入纸张时,它会自动对齐以在第一个标签上打印。使用FlashLabel或PrintLabel应用程序,一旦打印文本,打印机就会输出标签。我无法执行以下操作:我的文本打印正确,但标签只出来了一半。在我看来,打印机使用的是TSPL通信协议。是这个吗?如果你想,我反编译了2个工作的应用程序,试图看看它是如何完成的,但没有成功
在这里,我实际上在哪里:

private class PrintTask extends AsyncTask<BluetoothDevice, Void, Void> {

        @Override
        protected Void doInBackground(BluetoothDevice... devices) {
            BluetoothDevice printerDevice = devices[0];
            try {
                // Establish Bluetooth connection with the printer
                UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // UUID for SPP (Serial Port Profile)
                bluetoothSocket = printerDevice.createRfcommSocketToServiceRecord(uuid);
                bluetoothSocket.connect();

                // Get the output stream to send print data
                outputStream = bluetoothSocket.getOutputStream();

                // Send TSPL commands to set up the label (102mm x 51mm) and print "Hello World" with larger font size
                String printData = "SIZE 100 mm,50 mm\nGAP 0 mm,0 mm\nCLS\nTEXT 10 mm,10 mm,\"0\",0,2,2,\"Hello World\"\nPRINT 1,1\n";

                // Add escape command
                printData += "HOME\n";
                printData += "PRINT 1,1\n"; 
                outputStream.write(printData.getBytes());


                // Close the Bluetooth connection and output stream
                outputStream.close();
                bluetoothSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            // Display a successful print message
            Toast.makeText(MainActivity.this, "Printok", Toast.LENGTH_SHORT).show();
        }
    }

提前感谢任何愿意花时间帮助我的人。

6ie5vjzr

6ie5vjzr1#

好的。最后我发现了我的问题。我没有指定两个标签之间的空间。她的网站解释了TSPL命令:WebSite
这里有一个我的代码的例子,如果它可以帮助别人:

public class TSPLPrinter {

private String command = ""; // La commande TSPL à envoyer
private BluetoothAdapter bluetoothAdapter;
private BluetoothDevice bluetoothDevice;
private BluetoothSocket bluetoothSocket;
private OutputStream outputStream;
private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // UUID générique pour les appareils Bluetooth série

// Handler pour gérer les messages de connexion/déconnexion Bluetooth
private Handler handler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
            case 0:
                Log.i("TSPLPrinter", "Connexion Bluetooth réussie");
                break;
            case 1:
                Log.e("TSPLPrinter", "Erreur de connexion Bluetooth");
                break;
            case 2:
                Log.i("TSPLPrinter", "Déconnexion Bluetooth réussie");
                break;
        }
        return true;
    }
});

public void connectBluetooth(String macAddress) {

    try {
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        bluetoothDevice = bluetoothAdapter.getRemoteDevice(macAddress);

        // Ouverture du socket Bluetooth et connexion à l'appareil
        bluetoothSocket = bluetoothDevice.createRfcommSocketToServiceRecord(uuid);
        bluetoothSocket.connect();

        // Récupération de l'output stream pour envoyer des données à l'appareil
        outputStream = bluetoothSocket.getOutputStream();

        // Configuration du rouleau d'étiquettes
        String labelConfig = "SIZE 4,2\nGAP 0.12,0\n";
        outputStream.write(labelConfig.getBytes());

        // Commande pour écrire du texte centré
        String textCommand = "TEXT 200,100,\"3\",0,1,1,\"Hello World\"\n";
        outputStream.write(textCommand.getBytes());

        // Commande pour imprimer et terminer l'impression
        String printCommand = "PRINT 1\n";
        outputStream.write(printCommand.getBytes());
        String endCommand = "END\n";
        outputStream.write(endCommand.getBytes());

        // Fermeture du socket Bluetooth
        bluetoothSocket.close();

        // Envoi du message de connexion réussie
        handler.obtainMessage(0).sendToTarget();

    } catch (IOException ex) {
        // Envoi du message d'erreur de connexion
        handler.obtainMessage(1).sendToTarget();
    }
}

public void disconnectBluetooth() {
    try {
        // Fermeture du socket Bluetooth
        bluetoothSocket.close();

        // Envoi du message de déconnexion réussie
        handler.obtainMessage(2).sendToTarget();

    } catch (IOException ex) {
        Log.e("TSPLPrinter", "Erreur de déconnexion Bluetooth");
    }
}

}

相关问题