2013-02-20 50 views
0

android.webkit.WebView有capturePicture()来捕获当前WebView的全部内容,但是您将如何为网页上的特定元素执行此操作?例如,您可能会在div中使用CSS定位多个图像和文本元素。可能有很多元素,但我只想捕获在WebView中呈现的div捕获特定的WebView元素为图像格式?

我想出的唯一想法是仅将div作为另一个WebView的整个HTML加载并调用capturePicture。另一个问题是如何将Picture对象转换为可以与iText库(PNG,JPEG,GIF)一起使用的格式。有没有更简单的方法来实现这一点?

(我的应用程序的功能是输出PDF文档。)

回答

1

可以使用view.setDrawingCacheEnabled(true);捕捉视图图像。然后你必须创建一个方法来做到这一点。这里是我的保存方法

void Save() { 
    if (null != view.getDrawable()) { 
     view.setDrawingCacheEnabled(true); 
     view.buildDrawingCache(); 
     save = view.getDrawingCache(); 
     final File myDir = new File(folder); 
     myDir.mkdirs(); 
     final Random generator = new Random(); 
     int n = 10000; 
     n = generator.nextInt(n); 
     final String fname = "StyleMe-" + n + ".png"; 
      file = new File(myDir, fname); 
     if (file.exists()) 
      file.delete(); 
     try { 
      final FileOutputStream out = new FileOutputStream(file); 
      save.compress(Bitmap.CompressFormat.PNG, 100, out); 
      out.flush(); 
      out.close(); 
      sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
        Uri.parse("file://" 
          + Environment.getExternalStorageDirectory()))); 
      Toast.makeText(getApplication(), "Image Saved", 
        Toast.LENGTH_SHORT).show(); 
     } catch (final Exception e) { 
      Toast.makeText(getApplication(), 
        "Something Went Wrong check if you have Enough Memory", 
        Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     final Toast tst = Toast.makeText(getApplication(), 
       "Please Select An Image First", Toast.LENGTH_LONG); 
     tst.setGravity(Gravity.CENTER, 0, 0); 
     tst.show(); 
    } 
    view.setDrawingCacheEnabled(false); 
} 
+0

在上面的答案中,捕获DIV元素以创建图像的想法在哪里?这是为了让傻子? – YuDroid 2014-01-30 09:59:14

+0

@YuDroid。 View.getDrawingCache()它实际上捕获视图。作为一个图像。按照我上面的答案。你在开玩笑吗? – k0sh 2014-01-30 20:18:23

+0

但按照问题“可能有很多元素,但我只想捕获在WebView中呈现的div。”,您是如何得到特定元素的?这是我的问题。从其他视图捕获图像很直观。此外,当我的屏幕进入横向模式时,我没有获得WebView的全部高度,即getContentHeight()没有返回完整的HTML高度。如何处理这个? – YuDroid 2014-01-31 06:14:13