6

レシートを 1 つ印刷する必要があるアプリを開発しています。レシートには 1 つのロゴ (静的) イメージ ビューがあります。これを Bluetooth プリンターに印刷するにはどうすればよいですか? また、GestureOverlayView を使用して署名を取得しました。今度は、ロゴと領収書に関するいくつかのデータと共にそのジェスチャーも印刷する必要があります。ここに画像の説明を入力

アラビア語の文字列も1つ印刷する必要があります。これは TEXT VIEW に表示されます。署名を表示するために、レイアウトで画像ビューを使用しています。画像を確認してください。印刷する必要がある画像を添付しています。印刷についてのアイデアを教えてください。

印刷時にフォーマットを変更できます。つまり、データを四角形で印刷する必要はありませんが、画像の位置合わせが主な問題です。位置合わせについて知るにはどうすればよいですか?

4

2 に答える 2

9

これを使ってみてください....

public class BluetoothPrinterActivity extends Activity {

BluetoothAdapter mBTAdapter;
BluetoothSocket mBTSocket = null;
Dialog dialogProgress;
String BILL, TRANS_ID;
String PRINTER_MAC_ID = "00:1F:B7:02:8F:44";
final String ERROR_MESSAGE = "There has been an error in printing the bill.";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {

        BILL = "\nSale Slip No: 12345678" + " " + "04-08-2011\n";
        BILL = BILL + "----------------------------------------";
        BILL = BILL + "\n\n";
        BILL = BILL + "Total Qty:" + " " + "2.0\n";
        BILL = BILL + "Total Value:" + " " + "17625.0\n";
        BILL = BILL + "-----------------------------------------";

        mBTAdapter = BluetoothAdapter.getDefaultAdapter();

        if (mBTAdapter == null) {
            Toast.makeText(this, "Device has no bluetooth capability",Toast.LENGTH_LONG).show();
            finish();
        } else {
            if (!mBTAdapter.isEnabled()) {
                Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(i, 0);
            }

            // Register the BroadcastReceiver
            IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
            registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

            dialogProgress = new Dialog(BluetoothPrinterActivity.this);
            dialogProgress.setTitle("Finding printer...");
            dialogProgress.setOnDismissListener(new DialogInterface.OnDismissListener() {
                        public void onDismiss(DialogInterface dialog) {
                            dialog.dismiss();
                            setResult(RESULT_CANCELED);
                            finish();
                        }
                    });
            dialogProgress.show();

        }

        if (mBTAdapter.isDiscovering())
            mBTAdapter.cancelDiscovery();
        else
            mBTAdapter.startDiscovery();

        System.out.println("BT Searching status :" + mBTAdapter.isDiscovering());

    } catch (Exception e) {
        Log.e("Class ", "My Exe ", e);
    }
}

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        try {
            String action = intent.getAction();
            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                System.out.println("***" + device.getName() + " : "+ device.getAddress());

                if (device.getAddress().equalsIgnoreCase(PRINTER_MAC_ID)) {
                    mBTAdapter.cancelDiscovery();
                    dialogProgress.dismiss();
                    Toast.makeText(BluetoothPrinterActivity.this,device.getName() + " Printing data",Toast.LENGTH_LONG).show();
                    printBillToDevice(PRINTER_MAC_ID);
                    Toast.makeText(BluetoothPrinterActivity.this,device.getName() + " found", Toast.LENGTH_LONG).show();
                }
            }
        } catch (Exception e) {
            Log.e("Class ", "My Exe ", e);
        }
    }
};


@Override
protected void onDestroy() {
    super.onDestroy();
    try {
        if (dialogProgress != null)
            dialogProgress.dismiss();
        if (mBTAdapter != null)
            mBTAdapter.cancelDiscovery();
        this.unregisterReceiver(mReceiver);
    } catch (Exception e) {
        Log.e("Class ", "My Exe ", e);
    }
}


@Override
public void onBackPressed() {
    try {
        if (mBTAdapter != null)
            mBTAdapter.cancelDiscovery();
            this.unregisterReceiver(mReceiver);
    } catch (Exception e) {
        Log.e("Class ", "My Exe ", e);
    }
    setResult(RESULT_CANCELED);
    finish();
}


public void printBillToDevice(final String address) {
    new Thread(new Runnable() {
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    dialogProgress.setTitle("Connecting...");
                    dialogProgress.show();
                }

            });

            mBTAdapter.cancelDiscovery();

            try {
                System.out.println("**************************#****connecting");
                BluetoothDevice mdevice = mBTAdapter.getRemoteDevice(address);
                Method m = mdevice.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
                mBTSocket = (BluetoothSocket) m.invoke(mdevice, 1);

                mBTSocket.connect();
                OutputStream os = mBTSocket.getOutputStream();
                os.flush();

                os.write(BILL.getBytes());
                System.out.println(BILL);

                setResult(RESULT_OK);
                finish();
            } catch (Exception e) {
                Log.e("Class ", "My Exe ", e);
                e.printStackTrace();
                setResult(RESULT_CANCELED);
                finish();

            }

            runOnUiThread(new Runnable() {
                public void run() {
                    try {
                        dialogProgress.dismiss();
                    } catch (Exception e) {
                        Log.e("Class ", "My Exe ", e);
                    }
                }

            });

        }

    }).start();
  }
}

このリンクからAndroidのBluetoothプリンターの問題

于 2013-06-04T10:47:31.287 に答える
3

すでに寄せられた質問から解決策を得ることができるようになる前に、私は最善を尽くして答えます

Android アプリからの印刷には 3 つのオプションがあります

1> SDK/ライブラリ: (starmicronics のように、いくつかのデバイスに限定されます)

2> Google Play アプリ: (インテントをサードパーティアプリに直接呼び出す)

3> Google クラウド プリント: (推奨。使いやすく、アプリに統合できます) これにより、クラシック プリンター、クラウド プリント プリンターなどのプリンターを接続します。

Google プリントをユーザー視点で使用するには、ユーザーは Google プリント サービスを gmail アカウントで有効にする必要があります。Google クラウド プリントは多くの場所で使用されています。

Google プリント サービスの設定:

ブログ

https://stackoverflow.com/questions/11323805/how-to-setup-network-printer-to-google-cloud-print/14911180#14911180

Google クラウド プリントのセットアップ1

Google クラウド プリントのセットアップ2

gchromeによる印刷

Google クラウド プリンタ

クラウド プリンターをアプリに統合する:

Android には、他のプラットフォームのようなAirprintのオプションはありませんが、Google は、どのプリンターでもモバイル デバイスから印刷オプションを使用できるようにするための優れたクラウド印刷オプションを作成しました。

サンプルコード:

ファンコード

Google クラウド プリント コード

于 2013-03-21T08:14:56.870 に答える