4

顧客が食品を購入した後にレシートを印刷するレストラン アプリを開発しています。マネージャーがプリンターの構成に使用する構成画面をアプリに追加しました。管理者はテスト ページを印刷して、正しい IP とポートを入力したかどうかをテストできます。テストページを印刷するコードは次のとおりです。

private class PrintTask extends AsyncTask<Printer, Boolean, String> {

    @Override
    protected String doInBackground(Printer... params) {

        try {
            publishProgress(true);
            Socket sock = new Socket(params[0].getIp(), Integer.parseInt(params[0].getPort()));

            PrintWriter oStream = new PrintWriter(sock.getOutputStream());
            oStream.printf("--------------------------------\r\n");
            oStream.printf("***        TEST PRINT       ***\r\n");
            oStream.printf("You have configured your \n\r");
            oStream.printf(params[0].getName());
            oStream.printf("\r\nprinter successfully\n\r");
            oStream.printf("|           Thanks             |\r\n");
            oStream.printf("--------------------------------\r\n");
            oStream.close();
            sock.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        publishProgress(false);
        return "";
    }

    @Override
    protected void onProgressUpdate(Boolean... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
        if(!values[0]) {
            waitView.setVisibility(View.GONE);
        }
        else {
            waitView.setVisibility(View.VISIBLE);
        }
    }

}

問題は、ネットワーク プリンター (PC に接続されていないスタンドアロン プリンター) で印刷すると、テキストが正しく印刷されることです。ここでは、IP とデフォルトのポート 9100 を使用しています。しかし、PC に接続された共有プリンターに印刷すると、印刷に失敗します。私が間違っているところはどこですか...???

4

1 に答える 1

0

あなたの説明から、そのスタンドアロンプ​​リンターは、指定されたポートである種の「テキスト印刷サービス」を実行しているように見えます。したがって、このポートに送信するものはすべてテキストとして出力されるようです。

Windowsマシンに「共有」プリンターがある場合、Windowsプリンターサービスまたはそのようなものを使用して実装されます。ASCII テキストを書き込むことができるのは、単純なソケット/ポートだけではありません。

于 2013-08-30T10:49:15.720 に答える