11

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

我的问题是:

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

我怎样才能做到这一点?

这是我在蓝牙连接后打印文本的代码:

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 size和。font style请帮助我实现这一目标。如果有人可以建议任何链接,那么我也会很感激他/她。 帮助我找到解决此问题的方法

4

2 回答 2

8

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

我已经在这里的这个帖子中问过同样的问题,但还没有得到任何回应。只有一个答案,但这对我没有帮助。

让我们看看它是否对你有帮助。这里

如果你已经完成了,请在我的帖子中回答我。我一定会很感激你的。

现在我知道该怎么做,我必须应用反向工程并从市场上反编译一个 .apk,在 linux 上使用 dex2jar,然后用 java 反编译器打开 jar……试试这个……当你写这个命令时:

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

你正在向方法发送一个 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);

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

            // 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:我正在尝试打印图像,你知道吗?

于 2013-01-18T19:44:57.100 回答
0

我不确定,但您可以使用 Javaspan设置字体样式的方法来实现这一点。

尝试这样的事情:

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 开发:如何用 Spannable 替换 EditText 的一部分

如何在 android 中使用 SpannableString 和正则表达式?

于 2012-09-04T07:51:43.303 回答