【问题标题】:How to change the font size while printing in android?在android中打印时如何更改字体大小?
【发布时间】:2012-08-28 17:45:44
【问题描述】:

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

我的问题是:

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

【问题讨论】:

  • 请建议我在这种情况下应该怎么做?
  • 谁能告诉我我要在这里做什么
  • 还没有得到任何答案
  • 仍在寻找解决方案。有人可以帮帮我吗?
  • 投反对票很久了,但投反对票的人仍然没有任何评论。无论如何,谢谢。

标签: android printing bluetooth


【解决方案1】:

我不确定,但您可以使用 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?

【讨论】:

  • 对不起,但这不是我的问题的解决方案。无论如何感谢您的关注。
【解决方案2】:

您好,您在我对同一主题的回答上写了这个:

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

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

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

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

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

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

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

【讨论】:

  • 嗨,Narendra,非常感谢您的代码,我已经两天尝试按照现有手册格式化一些文本,但没有成功。我有一个与此相关的问题,例如:我按照您的建议激活了 BOLD 模式,然后我写了一行,然后我回到默认样式并写了另一行。打印机将仅考虑发送的最后一个参数写入所有内容,这是默认样式。你也有这个问题吗?
  • 默认样式是这样的:byte[] format = { 27, 33, 0 };那么你应该在文本out.write(format);String str="my message";out.write(str.getBytes(),0,str.getBytes().length);之前发送到打印机
  • 默认fontSize是多少,如何增大fontSize?
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 2022-01-05
  • 2011-06-07
  • 1970-01-01
相关资源
最近更新 更多