android 自动生成html报表图片

利用webview的catch ,可以先将数据生成html文件,再用webview读取html,截屏生成jpg.因为html的样式可以随意定制,这样也可以很容易的将长文字转换成图片。


  1. package com.test.html5;  
  2.   
  3. import java.io.BufferedOutputStream;  
  4. import java.io.File;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8.   
  9. import android.app.Activity;  
  10. import android.graphics.Bitmap;  
  11. import android.graphics.Canvas;  
  12. import android.graphics.Picture;  
  13. import android.os.Bundle;  
  14. import android.os.StrictMode;  
  15. import android.view.MotionEvent;  
  16. import android.view.View;  
  17. import android.view.View.OnClickListener;  
  18. import android.view.View.OnTouchListener;  
  19. import android.webkit.WebSettings;  
  20. import android.webkit.WebView;  
  21. import android.webkit.WebViewClient;  
  22.   
  23. public class HTML5Activity extends Activity implements OnClickListener{  
  24.     /** Called when the activity is first created. */  
  25.     private WebView webview;  
  26.   
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.main);  
  31.   
  32.         // 2.2版本以上服务器取数据冲突解决办法========start=========  
  33.         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites()  
  34.                 .detectNetwork() // or  
  35.                                     // .detectAll()  
  36.                                     // for  
  37.                                     // all  
  38.                                     // detectable  
  39.                                     // problems  
  40.                 .penaltyLog().build());  
  41.         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects()  
  42.                 .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath().build());  
  43.   
  44.         webview = (WebView) findViewById(R.id.web_3d);  
  45.         // 设置WebView属性,能够执行Javascript脚本  
  46.         WebSettings settings = webview.getSettings();  
  47.         settings.setJavaScriptEnabled(true);  
  48.         settings.setPluginState(WebSettings.PluginState.ON);  
  49.         settings.setPluginsEnabled(true);  
  50.         webview.setWebViewClient(new MvtFlashWebViewClient());  
  51.         // 截图用  
  52.         webview.setDrawingCacheEnabled(true);  
  53.         // 自适应屏幕大小  
  54.   
  55.         settings.setLoadWithOverviewMode(true);  
  56.         String url = testCreateHTML();// 载入本地生成的页面  
  57.         webview.loadUrl(url);  
  58.         webview.setOnTouchListener(new OnTouchListenerHTML5());  
  59.           
  60.     }  
  61.   
  62.     public class OnTouchListenerHTML5 implements OnTouchListener {  
  63.   
  64.         @Override  
  65.         public boolean onTouch(View v, MotionEvent event) {  
  66.             // TODO Auto-generated method stub  
  67.             if (event.getAction() == MotionEvent.ACTION_DOWN) {  
  68.                 webview.loadUrl("javascript:canvasMouseDown(" + event.getX() + "," + event.getY() + ")");  
  69.                 return true;  
  70.             } else if (event.getAction() == MotionEvent.ACTION_MOVE) {  
  71.                 webview.loadUrl("javascript:canvasMouseMove(" + event.getX() + "," + event.getY() + ")");  
  72.                 return true;  
  73.             } else if (event.getAction() == MotionEvent.ACTION_UP) {  
  74.                 // webview.loadUrl("javascript:canvasMouseDown("+event.getX()+","+event.getY()+")");  
  75.                 return true;  
  76.             }  
  77.             return false;  
  78.         }  
  79.   
  80.     }  
  81.   
  82.     public String testCreateHTML() {  
  83.         String name[] = { "桌子""椅子""其它" };  
  84.         int num[] = { 141 };  
  85.         float price[] = { 1002580 };  
  86.         String path = "/sdcard/savehtml.html";  
  87.         toHtml.convert(path, name, num, price);  
  88.         return "file:///mnt" + path;  
  89.     }  
  90.   
  91.     public void saveWebviewPic() {  
  92.         Picture picture = webview.capturePicture();  
  93.         Bitmap bmp = Bitmap.createBitmap(picture.getWidth(), picture.getHeight(), Bitmap.Config.RGB_565);  
  94.         Canvas c = new Canvas(bmp);  
  95.         picture.draw(c);  
  96.         savePic("/sdcard/html.jpg", bmp, 1);  
  97.     }  
  98.   
  99.     // 保存文件  
  100.     public static boolean savePic(String path, Bitmap bmp, int quality) {  
  101.         if (bmp == null || bmp.isRecycled()) {  
  102.             return false;  
  103.         }  
  104.         File myCaptureFile = new File(path);  
  105.         try {  
  106.             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));  
  107.             if (quality == 1) {// jpg  
  108.                 bmp.compress(Bitmap.CompressFormat.JPEG, 85, bos);  
  109.             } else if (quality == 2) {// png  
  110.                 bmp.compress(Bitmap.CompressFormat.PNG, 100, bos);  
  111.             } else if (quality == 3) {// 发微薄用  
  112.                 bmp.compress(Bitmap.CompressFormat.JPEG, 75, bos);  
  113.             } else if (quality == 5) {// jpg  
  114.                 bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);  
  115.             }  
  116.             try {  
  117.                 bos.flush();  
  118.                 bos.close();  
  119.                 // writeEixf(path);  
  120.             } catch (IOException e) {  
  121.                 // TODO Auto-generated catch block  
  122.                 e.printStackTrace();  
  123.             }  
  124.         } catch (FileNotFoundException e) {  
  125.             // TODO Auto-generated catch block  
  126.             e.printStackTrace();  
  127.         }  
  128.         return true;  
  129.     }  
  130.   
  131.     // Web视图  
  132.     private class MvtFlashWebViewClient extends WebViewClient {  
  133.         @Override  
  134.         public void onPageFinished(WebView view, String url) {  
  135.             // TODO Auto-generated method stub  
  136.               
  137.               
  138.             super.onPageFinished(view, url);  
  139.         }  
  140.     }  
  141.   
  142.     @Override  
  143.     public void onClick(View v) {  
  144.         // TODO Auto-generated method stub  
  145.         if(v.getId()==R.id.btn_save){  
  146.             saveWebviewPic();  
  147.         }  
  148.     }  
  149.   
  150. }  
package com.test.html5;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Picture;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class HTML5Activity extends Activity implements OnClickListener{
	/** Called when the activity is first created. */
	private WebView webview;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// 2.2版本以上服务器取数据冲突解决办法========start=========
		StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites()
				.detectNetwork() // or
									// .detectAll()
									// for
									// all
									// detectable
									// problems
				.penaltyLog().build());
		StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects()
				.detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath().build());

		webview = (WebView) findViewById(R.id.web_3d);
		// 设置WebView属性,能够执行Javascript脚本
		WebSettings settings = webview.getSettings();
		settings.setJavaScriptEnabled(true);
		settings.setPluginState(WebSettings.PluginState.ON);
		settings.setPluginsEnabled(true);
		webview.setWebViewClient(new MvtFlashWebViewClient());
		// 截图用
		webview.setDrawingCacheEnabled(true);
		// 自适应屏幕大小

		settings.setLoadWithOverviewMode(true);
		String url = testCreateHTML();// 载入本地生成的页面
		webview.loadUrl(url);
		webview.setOnTouchListener(new OnTouchListenerHTML5());
		
	}

	public class OnTouchListenerHTML5 implements OnTouchListener {

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			// TODO Auto-generated method stub
			if (event.getAction() == MotionEvent.ACTION_DOWN) {
				webview.loadUrl("javascript:canvasMouseDown(" + event.getX() + "," + event.getY() + ")");
				return true;
			} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
				webview.loadUrl("javascript:canvasMouseMove(" + event.getX() + "," + event.getY() + ")");
				return true;
			} else if (event.getAction() == MotionEvent.ACTION_UP) {
				// webview.loadUrl("javascript:canvasMouseDown("+event.getX()+","+event.getY()+")");
				return true;
			}
			return false;
		}

	}

	public String testCreateHTML() {
		String name[] = { "桌子", "椅子", "其它" };
		int num[] = { 1, 4, 1 };
		float price[] = { 100, 25, 80 };
		String path = "/sdcard/savehtml.html";
		toHtml.convert(path, name, num, price);
		return "file:///mnt" + path;
	}

	public void saveWebviewPic() {
		Picture picture = webview.capturePicture();
		Bitmap bmp = Bitmap.createBitmap(picture.getWidth(), picture.getHeight(), Bitmap.Config.RGB_565);
		Canvas c = new Canvas(bmp);
		picture.draw(c);
		savePic("/sdcard/html.jpg", bmp, 1);
	}

	// 保存文件
	public static boolean savePic(String path, Bitmap bmp, int quality) {
		if (bmp == null || bmp.isRecycled()) {
			return false;
		}
		File myCaptureFile = new File(path);
		try {
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
			if (quality == 1) {// jpg
				bmp.compress(Bitmap.CompressFormat.JPEG, 85, bos);
			} else if (quality == 2) {// png
				bmp.compress(Bitmap.CompressFormat.PNG, 100, bos);
			} else if (quality == 3) {// 发微薄用
				bmp.compress(Bitmap.CompressFormat.JPEG, 75, bos);
			} else if (quality == 5) {// jpg
				bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);
			}
			try {
				bos.flush();
				bos.close();
				// writeEixf(path);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return true;
	}

	// Web视图
	private class MvtFlashWebViewClient extends WebViewClient {
		@Override
		public void onPageFinished(WebView view, String url) {
			// TODO Auto-generated method stub
			
			
			super.onPageFinished(view, url);
		}
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		if(v.getId()==R.id.btn_save){
			saveWebviewPic();
		}
	}

}

  1. package com.test.html5;  
  2.   
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5.   
  6. public class toHtml {  
  7.     private static final String mHtmlHead = "<!DOCTYPE html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><title>无标题文档</title></head><body></table><p> </p>"  
  8.             + "<table width=\"566\" height=\"36\" border=\"1\">  <caption>  <strong>标题</strong>  <br />  姓名:a    日期: b <br /> </caption> "  
  9.             + "<tr> <td height=\"30\">名称</td>    <td>单价</td>    <td>数量</td>  </tr>";  
  10.     private static final String mHtmlItem = "<tr> <td height=\"30\">name</td>    <td>price</td>    <td>num</td>  </tr>";  
  11.     private static final String mHtmlEnd = "</table></body></html>";  
  12.   
  13.     public static void convert(String path, String name[], int num[], float price[]) {  
  14.         try {  
  15.             String result = mHtmlHead;  
  16.             for (int i = 0; i < name.length; i++) {  
  17.                 String mid = new String(mHtmlItem);  
  18.                 mid = mid.replace("name", name[i]);  
  19.                 mid = mid.replace("price""" + num[i]);  
  20.                 mid = mid.replace("num""" + price[i]);  
  21.                 result += mid;  
  22.             }  
  23.             for (int i = 0; i < 20; i++) {  
  24.                 String mid = new String(mHtmlItem);  
  25.                 mid = mid.replace("name", name[0]+i);  
  26.                 mid = mid.replace("price""" + num[0]);  
  27.                 mid = mid.replace("num""" + price[0]);  
  28.                 result += mid;  
  29.             }  
  30.             result += mHtmlEnd;  
  31.             saveStringToFile(path, result);  
  32.         } catch (Exception e) {  
  33.             // TODO Auto-generated catch block  
  34.             e.printStackTrace();  
  35.         }  
  36.     }  
  37.   
  38.     public static boolean saveStringToFile(String path, String content) {  
  39.         // FileWriter fw = new FileWriter(path);  
  40.         // MTDebug.startCount();  
  41.         // ByteBuffer dst = ByteBuffer.allocate(content.length() * 4);  
  42.   
  43.         try {  
  44.             FileOutputStream fos = new FileOutputStream(path);  
  45.             // 把长宽写入头部  
  46.             fos.write(content.getBytes());  
  47.             fos.flush();  
  48.             fos.close();  
  49.         } catch (IOException e) {  
  50.             // TODO Auto-generated catch block  
  51.             e.printStackTrace();  
  52.         }  
  53.         return true;  
  54.     }  
  55. }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值