クラウドサーバーでOdooPOSアプリケーションを構成し、デスクトップから[領収書の印刷]をクリックすると、chromeで印刷ダイアログが自動的にポップアップし、接続されたデバイスから印刷できます!同じアプリケーションAndroid単にwebView
を入れるだけで開発されました!
Androidデバイスとペアリングされた接続されたBluetoothサーマルプリンターを使用してこれを印刷する必要があります!たくさん検索しましたが、それでも解決策が得られませんでした!リンクや提案は大いに役立ちます
Webページのhtml/jsコードにアクセスできる場合は、次のように実行できます。
Jsコールバックを処理する特別なクラスを作成します。
private class PrintInterface {
@JavascriptInterface // required annotation!
public void printSome(String arg) { // here you can pass some args from js code
// do some printing here from Java code
}
}
Webviewのjsを有効にします。次に、作成したインターフェースをwebViewに追加します。 2番目のパラメーターとして、js内で使用される名前を指定する必要があります。クラス名と同じ「PrintInterface」と呼びました。
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new PrintInterface(), "PrintInterface");`
Jsコードで、PrintInterfaceから適切なメソッドを呼び出します。各メソッドには@JavascriptInterface
の注釈を付ける必要があることに注意してください(1を参照)。
$("#someHtmlButton").on("click", function() {
PrintInterface.printSome("some argument");
}
したがって、最後に、PrintInterface#printSomeメソッド内で、Javaコードから直接実行できます。
HTML印刷に関するいくつかのドキュメント: https://developer.Android.com/training/printing/html-docs
Android 4.4以降、WebViewでHTMLドキュメントを印刷できるようになりました。これに従ってください-
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = new WebView(this);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavascriptInterface(this, webView), "Android");
webView.loadUrl("Odoo receipt url");
setContentView(webView);
// Keep a reference to WebView object until you pass the PrintDocumentAdapter
// to the PrintManager
mWebView = webView;
}
public class MyJavascriptInterface {
Context context;
WebView view;
public MyJavascriptInterface(Context context, WebView view) {
this.context = context;
this.view = view;
}
@Android.webkit.JavascriptInterface
public void doPrint() {
createWebPrintJob(view);
}
private void createWebPrintJob(WebView webView) {
// Get a PrintManager instance
PrintManager printManager = (PrintManager) getActivity()
.getSystemService(Context.PRINT_SERVICE);
String jobName = getString(R.string.app_name) + " Document";
// Get a print adapter instance
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName);
// Create a print job with name and adapter instance
PrintJob printJob = printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
// Save the job object for later status checking
mPrintJobs.add(printJob);
}
}
}
次に、WebView内のHTMLから次のように呼び出します。
<input type="button" onClick="doWebViewPrint()" />
<script type="text/javascript">
function doWebViewPrint() {
Android.doPrint();
}
</script>
詳細については、 https://developer.Android.com/training/printing/html-docs を参照してください。
このようなサーマルプリンターは、単にESC
入力(エスケープシーケンス)を期待し、HTML
マークアップまたはグラフィックスの印刷をサポートしません(ただし、それらは送信前にラスター化されています)。質問はどのプリンターを示していないため、答えるのは難しいですが、一般的には、1回はHTML
に、もう1回はESC
出力にレンダリングする必要があります(一般的なサーマルプリンターも同様です- ゼブラ または エプソン )。 bluetoothserialESC
を介してSPP
シーケンスを送信するためにも使用できます(HTML
はうまく印刷されません)。 answer も参照してください。