android 自动生成html报表图片

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


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

}

package com.test.html5;

import java.io.FileOutputStream;
import java.io.IOException;

public class toHtml {
	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>"
			+ "<table width=\"566\" height=\"36\" border=\"1\">  <caption>  <strong>标题</strong>  <br />  姓名:a    日期: b <br /> </caption> "
			+ "<tr> <td height=\"30\">名称</td>    <td>单价</td>    <td>数量</td>  </tr>";
	private static final String mHtmlItem = "<tr> <td height=\"30\">name</td>    <td>price</td>    <td>num</td>  </tr>";
	private static final String mHtmlEnd = "</table></body></html>";

	public static void convert(String path, String name[], int num[], float price[]) {
		try {
			String result = mHtmlHead;
			for (int i = 0; i < name.length; i++) {
				String mid = new String(mHtmlItem);
				mid = mid.replace("name", name[i]);
				mid = mid.replace("price", "" + num[i]);
				mid = mid.replace("num", "" + price[i]);
				result += mid;
			}
			for (int i = 0; i < 20; i++) {
				String mid = new String(mHtmlItem);
				mid = mid.replace("name", name[0]+i);
				mid = mid.replace("price", "" + num[0]);
				mid = mid.replace("num", "" + price[0]);
				result += mid;
			}
			result += mHtmlEnd;
			saveStringToFile(path, result);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static boolean saveStringToFile(String path, String content) {
		// FileWriter fw = new FileWriter(path);
		// MTDebug.startCount();
		// ByteBuffer dst = ByteBuffer.allocate(content.length() * 4);

		try {
			FileOutputStream fos = new FileOutputStream(path);
			// 把长宽写入头部
			fos.write(content.getBytes());
			fos.flush();
			fos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return true;
	}
}


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值