Как добавить поддержку печати в Android WebView - PullRequest
0 голосов
/ 19 октября 2019

Здравствуйте, ppl. Я создал одно приложение для Android, используя Android WebView. В URL, который я загрузил в webview, есть параметры печати в каком-то месте. На самом деле я придерживался этого урока . Кто-нибудь может сказать, где я могу реализовать этот метод 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);
}
}

1 Ответ

0 голосов
/ 19 октября 2019

Вам не нужен метод вызова 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);
...