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

11

我通过我的安卓手机将文本发送到蓝牙打印机。打印机和我的设备都通过蓝牙连接。

我的问题是:

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

我该如何实现呢?

这是我打印文本代码与蓝牙连接之后的样子:

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;
}
我想改变发送到打印机打印的文本的字体大小字体样式。请帮我实现这个目标。如果有人能提供任何链接,我也将不胜感激。 帮助我找到解决这个问题的方法

请建议我在这种情况下应该做什么? - Narendra Pal
有人能告诉我在这里我该做什么吗? - Narendra Pal
还没有得到任何答案。 - Narendra Pal
仍在寻找解决方案。有人能帮我吗? - Narendra Pal
1
长时间以来被踩了,但是踩的人没有留下任何评论。不管怎样,还是谢谢。 - Narendra Pal
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);

这段代码打印出最大的文本大小...希望这可以帮到你...
附注:对于我的英语表示抱歉
附注2:我正在尝试打印图片,你知道怎么做吗?

嗨,Narendra,非常感谢你的代码,我已经尝试了两天按照现有的手册格式化一些文本,但是没有成功。我遇到了一个相关的问题,例如:我按照你的建议激活了粗体模式,然后我写了一行,之后我回到默认样式并写了另一行。打印机将只考虑发送的最后一个参数,即默认样式。你也遇到这个问题吗? - user997593
默认样式是这样的:byte[] format = { 27, 33, 0 };,然后在文本 out.write(format); 之前将其发送到打印机。String str="我的消息";out.write(str.getBytes(),0,str.getBytes().length); - Leonardo Sapuy
2
默认字体大小是多少,如何增加字体大小? - Tuan Nguyen
@LeonardoSapuy 是 'arrayOfByte1[2]' 还是 'format[2]'? - Sakkeer Hussain

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开发:如何使用Spannable替换EditText的一部分 如何在Android中使用带有正则表达式的SpannableString?

抱歉,这不是我的问题的解决方案。无论如何,感谢您的关注。 - Narendra Pal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接