如何在 android webview 中添加打印支持

How to add print support in android webview

大家好,我已经使用 android webview 创建了一个 android 应用程序。 在我加载到 webview 的 url 中,某些地方有打印选项。其实我有 坚持 this tutorial。谁能告诉我在哪里可以实现 doWebViewPrint() 方法 在我的项目中。如果有人知道更好的教程网站意味着请告诉我

这是我的主要活动

public class MainActivity extends AppCompatActivity {
        public WebView webView;
        public WebView mWebView
        ProgressBar progressBar;
        ArrayList<PrintJob> printJobs = new ArrayList<PrintJob>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            webView = (WebView)findViewById(R.id.web);
            progressBar = (ProgressBar)findViewById(R.id.progressBar1);
            webView.setWebViewClient(new overload());
            setProgressBarVisibility(View.VISIBLE);
            webView.setWebViewClient(new WebViewClient() {
                 @Override
                public void onPageStarted(WebView view, String url, Bitmap favion){
                    super.onPageStarted(view,url,favion);
                    setProgressBarVisibility(View.VISIBLE);
                }
                @Override
                public void onPageFinished(final WebView view, String url) {
                    //hide loading image
                    findViewById(R.id.imageLoading1).setVisibility(View.GONE);
                    //hide progressbar
                    setProgressBarVisibility(View.GONE);
                    //show webview
                    findViewById(R.id.web).setVisibility(View.VISIBLE);
                   // doWebViewPrint();
                 }
            });
            webView.loadUrl(url);
            webView.loadUrl("javascript:var footer = document.getElementById(\"footer\"); footer.parentNode.removeChild(footer); ");
            WebSettings webSettings = webView.getSettings();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                webSettings.setAllowUniversalAccessFromFileURLs(true);
            }
            webSettings.setAllowFileAccessFromFileURLs(true);
            webSettings.setJavaScriptEnabled(true);
            webSettings.setLoadWithOverviewMode(true);

        }
      private void doWebViewPrint() {
    // Create a WebView object specifically for printing
    WebView webView = new WebView(MainActivity.this);
    webView.setWebViewClient(new WebViewClient() {

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    return false;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
    Log.i(TAG, "page finished loading " + url);
    createWebPrintJob(view);
    mWebView = null;
    }
    });

    // Generate an HTML document on the fly:
    String htmlDocument = "<html><body><h1>Test Content</h1><p>Testing, " +
    "testing, testing...</p></body></html>";
    webView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null);

    // Keep a reference to WebView object until you pass the PrintDocumentAdapter
    // to the PrintManager
    mWebView = webView;
    }
  private void createWebPrintJob(WebView webView) {

    // Get a PrintManager instance
    PrintManager printManager = (PrintManager) MainActivity.this
            .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());

    printJobs.add(printJob);
}
}

您不需要调用 doWebViewPrint() 方法,您已经按照自己的风格完成了该部分。页面加载完成后调用 createWebPrintJob(view) 方法。

像这样修改您的代码,例如:

webView.setWebViewClient(new overload());
setProgressBarVisibility(View.VISIBLE);
webView.setWebViewClient(new WebViewClient() {
             @Override
            public void onPageStarted(WebView view, String url, Bitmap favion){
                super.onPageStarted(view,url,favion);
                setProgressBarVisibility(View.VISIBLE);
            }
            @Override
            public void onPageFinished(final WebView view, String url) {
                //hide loading image
                findViewById(R.id.imageLoading1).setVisibility(View.GONE);
                //hide progressbar
                setProgressBarVisibility(View.GONE);
                //show webview
                findViewById(R.id.web).setVisibility(View.VISIBLE);
                createWebPrintJob(view);//***
             }
        });
        webView.loadUrl(url);