【问题标题】:How to push print to bluetooth thermal printer from android webview?如何从 android webview 将打印推送到蓝牙热敏打印机?
【发布时间】:2018-03-20 05:55:58
【问题描述】:

我们在云服务器和桌面配置了 Odoo POS 应用程序,如果我们点击打印收据,它会自动弹出 chrome 中的打印对话框,并可以从连接的设备打印!我们在 android 中开发的相同应用程序只需输入webView

现在我需要使用与 Android 设备配对的蓝牙热敏打印机进行打印!我搜索了很多,但仍然没有得到任何解决方案!任何链接或建议都会有很大帮助

【问题讨论】:

  • 所以我认为您不应该为此使用 Webview,而应该为应用程序本地实现逻辑,以便您可以与连接的设备通信。 Webview 不会为您提供那种功能。
  • @NovoLucas:是的,但是 webview 是必要的,我们不能完全原生地实现 Odoo!所以没有办法从 webview 连接到蓝牙打印机?

标签: android printing bluetooth-printing


【解决方案1】:

这样的热敏打印机只需要ESC 输入(转义序列)并且不支持打印HTML 标记或图形(除非它们在发送之前已经被光栅化)。很难回答,因为这个问题并没有指出是哪台打印机——但一般来说,一个人必须渲染一次到HTML——一次渲染到ESC输出(假设常见的热敏打印机,比如ZebraEpson) . bluetoothserial 也可用于通过SPP 发送ESC 序列(HTML 打印效果不佳)。另见answer

【讨论】:

    【解决方案2】:

    如果您可以访问您网页的html/js代码,您可以执行以下操作:

    1. 创建特殊的类,它将处理 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
        }
      }
      
    2. 为 webview 启用 js。然后将创建的界面添加到 webView。作为第二个参数,您需要指定名称,它将在 js 中使用。我叫它“PrintInterface”,和类名一样:

      webView.getSettings().setJavaScriptEnabled(true);
      webView.addJavascriptInterface(new PrintInterface(), "PrintInterface");`
      
    3. 在您的 js 代码中,从 PrintInterface 调用适当的方法。注意每个方法都必须用@JavascriptInterface注解(看1.):

      $("#someHtmlButton").on("click", function() {
          PrintInterface.printSome("some argument");
      } 
      

    所以,最后,在您的 PrintInterface#printSome 方法中,您可以直接从 Java 代码做任何您想做的事情。

    一些关于 html 打印的文档:https://developer.android.com/training/printing/html-docs

    【讨论】:

      【解决方案3】:

      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

      【讨论】:

      • 什么是 mPrintJobs??
      猜你喜欢
      • 2019-08-27
      • 2013-11-11
      • 1970-01-01
      • 2018-04-28
      • 2019-11-23
      • 2019-01-27
      • 1970-01-01
      • 2022-12-25
      • 1970-01-01
      相关资源
      最近更新 更多