-7

I have an android tablet in which inbuilt printer and scanner are present. Now my task is to print a gate pass. Gate pass layout contains many text fields and edit text. I need my tablets printer to print this whole page.I need the code in java.

I would like to know if printing can be done directly without any PDF or Bluetooth. Because I can print only a single field using the print button as I have all the sdk regarding that printer. Now, my issue is that I want to print the whole layout.

Mounika
  • 13
  • 5

1 Answers1

0

try this code hope it help you

openButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
    try {
        findBT();
        openBT();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}});

Find BT Method

// this will find a bluetooth printer device


void findBT() {try {
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    if(mBluetoothAdapter == null) {
        myLabel.setText("No bluetooth adapter available");
    }

    if(!mBluetoothAdapter.isEnabled()) {
        Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBluetooth, 0);
    }

    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();

    if(pairedDevices.size() > 0) {
        for (BluetoothDevice device : pairedDevices) {

            // RPP300 is the name of the bluetooth printer device
            // we got this name from the list of paired devices
            if (device.getName().equals("RPP300")) {
                mmDevice = device;
                break;
            }
        }
    }

    myLabel.setText("Bluetooth device found.");

}catch(Exception e){
    e.printStackTrace();
}}

Open BT method

// tries to open a connection to the bluetooth printer device


    void openBT() throws IOException {
try {// Standard SerialPortService ID
    UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
    mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
    mmSocket.connect();
    mmOutputStream = mmSocket.getOutputStream();
    mmInputStream = mmSocket.getInputStream();

    beginListenForData();

    myLabel.setText("Bluetooth Opened");

} catch (Exception e) {
    e.printStackTrace();
}}

We need beginListenForData() method so that openBT() method will work.

after opening a connection to bluetooth printer device, we have to listen and check if a data were sent to be printed.

    void beginListenForData() {
try {final Handler handler = new Handler();

    // this is the ASCII code for a newline character
    final byte delimiter = 10;

    stopWorker = false;
    readBufferPosition = 0;
    readBuffer = new byte[1024];

    workerThread = new Thread(new Runnable() {
        public void run() {

            while (!Thread.currentThread().isInterrupted() && !stopWorker) {

                try {

                    int bytesAvailable = mmInputStream.available();

                    if (bytesAvailable > 0) {

                        byte[] packetBytes = new byte[bytesAvailable];
                        mmInputStream.read(packetBytes);

                        for (int i = 0; i < bytesAvailable; i++) {

                            byte b = packetBytes[i];
                            if (b == delimiter) {

                                byte[] encodedBytes = new byte[readBufferPosition];
                                System.arraycopy(
                                    readBuffer, 0,
                                    encodedBytes, 0,
                                    encodedBytes.length
                                );

                                // specify US-ASCII encoding
                                final String data = new String(encodedBytes, "US-ASCII");
                                readBufferPosition = 0;

                                // tell the user data were sent to bluetooth printer device
                                handler.post(new Runnable() {
                                    public void run() {
                                        myLabel.setText(data);
                                    }
                                });

                            } else {
                                readBuffer[readBufferPosition++] = b;
                            }
                        }
                    }

                } catch (IOException ex) {
                    stopWorker = true;
                }

            }
        }
    });

    workerThread.start();

} catch (Exception e) {
    e.printStackTrace();
}}

We will make an onClickListener for the “Send” button. Put the following code after the onClickListener of the “Open” button, inside onCreate() method.

// send data typed by the user to be printed
sendButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
    try {
        sendData();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}});

sendData() method is needed so that the “Open” button will work. Put it below the beginListenForData() method code block.

// this will send text data to be printed by the bluetooth printer

void sendData() throws IOException {try {

    // the text typed by the user
    String msg = myTextbox.getText().toString();
    msg += "\n";

    mmOutputStream.write(msg.getBytes());

    // tell the user data were sent
    myLabel.setText("Data sent.");

} catch (Exception e) {
    e.printStackTrace();
}}

We will code an onClickListener for the “close” button so we can close the connection to Bluetooth printer and save battery. Put the following code after the onClickListener of the “Send” button, inside onCreate() method.

// close bluetooth connection
closeButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
    try {
        closeBT();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}});

closeBT() method in Step 12 will not work without the following code. Put it below the sendData() method code block.

// close the connection to bluetooth printer.
void closeBT() throws IOException {
try {
    stopWorker = true;
    mmOutputStream.close();
    mmInputStream.close();
    mmSocket.close();
    myLabel.setText("Bluetooth Closed");
} catch (Exception e) {
    e.printStackTrace();
}}

Make sure the BLUETOOTH permission was added to your manifest file. It is located in manifests/AndroidManifest.xml, the code inside should look like the following.

<uses-permission android:name="android.permission.BLUETOOTH" />
Vishal Thakkar
  • 2,117
  • 2
  • 16
  • 33
  • Thanks for the code but, we don't want to use bluetooth instead we have to use the printer which is inbuilt in the tablet. Device information: An android tablet with inbuilt thermal 2 inch printer and a finger print scanner. – Mounika Feb 26 '16 at 06:52
  • check this link http://stackoverflow.com/questions/20717189/how-to-print-pdf-using-android-4-4-printing-framework/20719729#20719729 – Vishal Thakkar Feb 26 '16 at 07:20