11

I am sending the text to the bluetooth printer via my android cell. Both the printer and my device are connected via the bluetooth. It's Working fine and I am getting the desired text on the paper.

My question is:

The printer is taking the default font size of the text. I want to change the font size of the text which is to be printed.

How can i achieve this??

Here is my code of printing the text after the bloutooth connectivity:

private void connect_print(BluetoothDevice bluetoothDevicess)  {
    // some code
    printData();
    // some code
}

The printData() method

private void printData() {
    // TODO Auto-generated method stub
    String str = new String("This is the text sending to the printer");
    String newline = "\n";
    try {
        out.write(str.getBytes(),0,str.getBytes().length);
        Log.i("Log", "One line printed");
    } catch (IOException e) {
        Toast.makeText(BluetoothDemo.this, "catch 1", Toast.LENGTH_LONG).show();
        e.printStackTrace();
        Log.i("Log", "unable to write ");
        flagCheck = false;
    }
    try {
        out.write(newline.getBytes(),0,newline.getBytes().length);
    } catch (IOException e) {        
        Log.i("Log", "Unable to write the new line::");
        e.printStackTrace();
        flagCheck = false;
    }
    flagCheck = true;
}

I want to change the font size and the font style of the text which is sending to the printer to print. Please help me to achieve this. If anyone can suggest any link then too i will appreciate him/her. Help me to find the solution to this problem

Narendra Pal
  • 6,474
  • 13
  • 49
  • 85

2 Answers2

8

Hi you write on my answer of the same theme this:

I have already asked the same question in this thread HERE, but didnt yet got any response. Got only one answer but it was not helped me.

Let see whether it help you. HERE

If you have done with it then please answer me in my thread. I will definitely appreciate you.

Now I konw how to do it, i had to apply reverse ingeneering and decompile an .apk from the market, using dex2jar on linux and next opening jar with java decompiler... Try this... when u write this command:

out.write(str.getBytes(),0,str.getBytes().length);

U are sending to the method an byte[] array, u can modify format sending another byte[] array before send the real byte[] array...

The default format byte[] array is this:

byte[] arrayOfByte1 = { 27, 33, 0 };

So u can try this:

byte[] format = { 27, 33, 0 };

out.write(format);

out.write(str.getBytes(),0,str.getBytes().length);

These lines i'll print u the default format text, but uf u do it:

 byte[] format = { 27, 33, 0 };

format[2] = ((byte)(0x8 | arrayOfByte1[2]));

out.write(format);

out.write(str.getBytes(),0,str.getBytes().length);

It will print text in bold style... U can try this oter format arrays:

            // Bold
            format[2] = ((byte)(0x8 | arrayOfByte1[2]));

            // Height
            format[2] = ((byte)(0x10 | arrayOfByte1[2]));

            // Width
            format[2] = ((byte) (0x20 | arrayOfByte1[2]));

            // Underline
            format[2] = ((byte)(0x80 | arrayOfByte1[2]));

            // Small
            format[2] = ((byte)(0x1 | arrayOfByte1[2]));

Too u can combine it, then if u like little and bold text, uncomment these array asignements, for example:

 byte[] format = { 27, 33, 0 };

    // Bold
format[2] = ((byte)(0x8 | arrayOfByte1[2]));
// Height
format[2] = ((byte)(0x10 | arrayOfByte1[2]));
// Width
format[2] = ((byte) (0x20 | arrayOfByte1[2]));
// Underline
// format[2] = ((byte)(0x80 | arrayOfByte1[2]));
// Small
// format[2] = ((byte)(0x1 | arrayOfByte1[2]));
    out.write(format);
    out.write(str.getBytes(),0,str.getBytes().length);

This last code prints que biggest text size... I hope this can helps u...

Pdta: sorry for my english

Pdta2: I'm trying to print images, u know how??

Poovizhirajan N
  • 1,263
  • 1
  • 13
  • 29
Leonardo Sapuy
  • 2,600
  • 2
  • 23
  • 30
  • Hi Narendra, thanks a lot for your code, I have been two days trying to format some text following the existing manuals and it didn't worked out. I have a problem related to this, for example: I activate BOLD mode following your suggestion, then I write a line, afterwards I go back to default style and I write another line. The printer will write everything just taking into account the last parameter sent, which is the default style. Did you have this problem as well? – user997593 Mar 13 '13 at 18:57
  • Default style is this: `byte[] format = { 27, 33, 0 };` then you should send it to the printer before the text `out.write(format);` `String str="my message";` `out.write(str.getBytes(),0,str.getBytes().length);` – Leonardo Sapuy Mar 14 '13 at 21:19
  • 2
    what's default fontSize, and how to increase fontSize? – Tuan Nguyen Jan 14 '19 at 02:30
  • @LeonardoSapuy 'arrayOfByte1[2]' or 'format[2]'? – Sakkeer Hussain May 22 '22 at 05:22
0

I am not sure, but you may be able to achieve this with the Java span method for setting up font style.

Try something like this:

int start=editbox.getSelectionStart();

int end=editbox.getSelectionEnd();

Spannable span=(Spannable)editbox.getText();

StyleSpan f = new StyleSpan( 
                        Typeface.createFromAsset(getAssets(),
                         "fonts/genbkbasr.ttf"));

span.setSpan(f, start,end, 0);

Similarly, you can apply font style, font color etc...

For more detail check these:

Android Development: How To Replace Part of an EditText with a Spannable

How to use SpannableString with Regex in android?

hat
  • 781
  • 2
  • 14
  • 25
Aamirkhan
  • 5,746
  • 10
  • 47
  • 74