2017-09-06 1 views
1

Je veux imprimer le tout WebView sur Button Click.Comment imprimer WebView entier (Scrollable)?

J'ai utilisé l'imprimante Citizen. J'ai essayé ci-dessous.

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; 
} 

Mais le problème est, Cela peut imprimer seulement une partie visible de WebView.

Comment imprimer tout le WebView? Dessinez l'objet DecorView de la fenêtre en cours, puis dessinez l'objet Bitmap.

+0

double possible de [qui peut remplacer la fonction capturePicture] (https://stackoverflow.com/questions/20942623/which-can-replace-capturepicture-function) –

+0

@ godslayer_69 J'ai essayé cette réponse mais n'a pas obtenu Succès. –

Répondre

1

Et vous pouvez faire comme ça.

Avant de le faire, vous pouvez le faire.

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"); 

Et vérifiez la 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(); 
    } 
} 

Ajoutez une autorisation dans votre manifeste.

<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 utilisation

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 même à la vôtre, il fonctionne bien dans mon appareil.

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

Maintenant, ma méthode fonctionne également, Pas besoin de stocker le fichier sur la carte SD. Je viens d'ajouter 'if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP) { WebView.enableSlowWholeDocumentDraw(); } 'dans mon code, et mon code fonctionne très bien. Merci pour l'aide. –

+0

Juste vous donner un test.Et vous serez facile à connaître. – KeLiuyue