如何在android中打印时更改字体大小?

时间:2012-09-04 05:13:57

标签: android printing bluetooth

我通过我的Android手机单元将文本发送到蓝牙打印机。 打印机和我的设备都通过蓝牙连接。 它工作正常,我在纸上得到了所需的文字。

我的问题是:

打印机正在使用文本的默认 font size 。我想更改要打印的文本的字体大小。

我怎样才能实现这个目标?

以下是我在bloutooth连接后打印文本的代码:

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

printData()方法

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;
}

我想更改发送到打印机的文本的font sizefont style进行打印。 请帮我实现这个目标。 如果有人可以建议任何链接,我也会感激他/她。 帮我找到解决此问题的方法

2 个答案:

答案 0 :(得分:7)

嗨,你写下我对同一主题的回答:

  

我已经在这个帖子中问了同样的问题,但没有   但有任何回应。只有一个答案,但它没有帮助我。

     

让我们看看它是否对您有所帮助。该处

     

如果你已经完成了它,请在我的帖子中回答我。我会   非常感谢你。

现在我知道怎么做了,我不得不在市场上应用反向生成和反编译.apk,在linux上使用dex2jar,然后用java反编译器打开jar ...尝试这个...当你写下这个命令:

  

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

U正在向方法发送一个byte []数组,你可以在发送真实byte []数组之前修改发送另一个byte []数组的格式...

默认格式byte []数组是:

  

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

所以你可以试试这个:

  

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

out.write(format);

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

这些行我将打印默认格式文本,但是你这样做:

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

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

out.write(format);

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

它将以粗体样式打印文本... U可以尝试这种格式数组:

            // 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]));

你可以将它组合起来,然后如果你喜欢小而粗体的文本,请取消注释这些数组的对象,例如:

 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);

这最后一个代码打印了最大的文本大小...我希望这可以帮助你......

Pdta:对不起我的英文

Pdta2:我正在尝试打印图像,你知道怎么做?

答案 1 :(得分:0)

我不确定,但您可以使用Java span方法来设置字体样式。

尝试这样的事情:

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);

同样,您可以应用字体样式,字体颜色等......

有关详细信息,请查看以下内容:

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

How to use SpannableString with Regex in android?