我们在云服务器和桌面配置了 Odoo POS 应用程序,如果我们点击打印收据,它会自动在 chrome 中弹出打印对话框,并且可以从连接的设备打印!我们在android中开发的相同应用程序只需放入webView
!
现在我需要使用与 Android 设备配对的已连接蓝牙热敏打印机来打印它!我搜索了很多,但仍然没有得到任何解决方案!任何链接或建议都会有很大帮助
我们在云服务器和桌面配置了 Odoo POS 应用程序,如果我们点击打印收据,它会自动在 chrome 中弹出打印对话框,并且可以从连接的设备打印!我们在android中开发的相同应用程序只需放入webView
!
现在我需要使用与 Android 设备配对的已连接蓝牙热敏打印机来打印它!我搜索了很多,但仍然没有得到任何解决方案!任何链接或建议都会有很大帮助
如果您可以访问网页的 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。作为第二个参数,您需要指定名称,它将在 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
标记或图形(除非它们在发送之前已经被光栅化)。很难回答,因为这个问题并没有指明是哪台打印机——但一般来说,一个打印机必须渲染一次HTML
——一次ESC
输出(假设常见的热敏打印机,比如Zebra或Epson)。bluetoothserial也可用于通过(不能很好地打印)发送ESC
序列。另见答案。SPP
HTML