2017-09-06 1 views
1

Ich möchte das gesamte WebView auf Button klicken.Wie kann man ganze WebView drucken (scrollbar)?

Ich benutzte Citizen Printer. Ich versuchte unter Weg.

private Bitmap CitizenWebPrint(WebView webView) { 
    Bitmap bitmapCitizen = null; 
    Picture capturePicture = webView.capturePicture(); 
    int width = capturePicture.getWidth(); 
    int height = capturePicture.getHeight(); 

    try { 
     bitmapCitizen = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); 
    } catch (OutOfMemoryError e) { 
     Toast.makeText(getApplicationContext(),"2",Toast.LENGTH_LONG).show(); 
    } 
    capturePicture.draw(new Canvas(bitmapCitizen)); 

    return bitmapCitizen; 
} 

Aber Problem ist, Dies kann nur sichtbaren Teil WebView drucken.

Wie kann ich das gesamte WebView drucken?

+0

Mögliche Duplikat (https://stackoverflow.com/questions/20942623/which-can-replace-capturepicture-function) –

+0

@ godslayer_69 ich diese Antwort haben versucht, [Welche kann capturePicture Funktion ersetzen], aber nicht bekommen Erfolg. –

Antwort

1

Zeichnen Sie das DecorView-Objekt des aktuellen Fensters, und zeichnen Sie dann das Bitmap-Objekt.

Und Sie können so etwas tun.

Bevor Sie es tun, können Sie dies tun.

WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setSupportZoom(true); 
    webView.requestFocusFromTouch(); 
    webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    }); 
    webView.loadUrl("your url"); 

Und überprüfen Sie die Version.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    checkSdkVersion(); 
    setContentView(R.layout.activity_webview_capture); 
} 

// check version 
private void checkSdkVersion() { 
    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) { 
     WebView.enableSlowWholeDocumentDraw(); 
    } 
} 

Fügen Sie die Berechtigung in Ihrem Manifest hinzu.

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

Way 1

private void getScreenshot() { 
    float scale = webView.getScale(); 
    int webViewHeight = (int) (webView.getContentHeight() * scale + 0.5); 
    Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), webViewHeight, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    webView.draw(canvas); 
    // save to the File 
    try { 
     String fileName = Environment.getExternalStorageDirectory().getPath() + "/webview_capture1.jpg"; 
     FileOutputStream fos = new FileOutputStream(fileName); 
     // Save 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos); 
     fos.close(); 
     Toast.makeText(WebviewFromDraw.this, "Screenshot OK", Toast.LENGTH_LONG).show(); 
     bitmap.recycle(); 
    } catch (Exception e) { 
     e.getMessage(); 
    } 
} 

Way 2 Verwendung

private void getScreenshot() { 

    bitmap = webView.getDrawingCache(); 
    try { 
     String fileName = Environment.getExternalStorageDirectory().getPath()+"/webview_capture2.jpg"; 
     FileOutputStream fos = new FileOutputStream(fileName); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos); 
     fos.close(); 
     Toast.makeText(WebviewFromDrawCache.this, "Screenshot OK", Toast.LENGTH_LONG).show(); 

    } catch (Exception e) { 
     Log.e("TAG", e.getMessage()); 
    } 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    //recycle 
    if(bitmap!=null) { 
     bitmap.recycle(); 
    } 
} 

Way 3 gleich bei Ihnen, es funktioniert gut in meinem Gerät.

private void getScreenshot() { 
    Picture picture = webView.capturePicture(); 
    int width = picture.getWidth(); 
    int height = picture.getHeight(); 
    if (width > 0 && height > 0) { 
     Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     picture.draw(canvas); 
     try { 
      String fileName = Environment.getExternalStorageDirectory().getPath()+"/webview_capture3.jpg"; 
      FileOutputStream fos = new FileOutputStream(fileName); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos); 
      fos.close(); 
      Toast.makeText(WebviewFromCapture.this, "Screenshot ok", Toast.LENGTH_LONG).show(); 
      bitmap.recycle(); 
     } catch (Exception e) { 
      Log.e(TAG, e.getMessage()); 
     } 
    } 
} 
+0

Jetzt funktioniert meine Methode auch, keine Notwendigkeit, die Datei auf der SD-Karte zu speichern. Ich füge einfach 'if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP) { WebView.enableSlowWholeDocumentDraw(); } 'in meinem Code, und mein Code funktioniert gut. Danke für die Hilfe. –

+0

Geben Sie nur Test.Und Sie werden es leicht zu wissen. – KeLiuyue

Verwandte Themen