android 自动生成html报表图片
16lz
2021-01-25
利用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;@Overridepublic 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 {@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubif (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) {// jpgbmp.compress(Bitmap.CompressFormat.JPEG, 85, bos);} else if (quality == 2) {// pngbmp.compress(Bitmap.CompressFormat.PNG, 100, bos);} else if (quality == 3) {// 发微薄用bmp.compress(Bitmap.CompressFormat.JPEG, 75, bos);} else if (quality == 5) {// jpgbmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);}try {bos.flush();bos.close();// writeEixf(path);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return true;}// Web视图private class MvtFlashWebViewClient extends WebViewClient {@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubsuper.onPageFinished(view, url);}}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(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 = "无标题文档
"+ " 标题
姓名:a 日期: b
"+ " 名称 单价 数量 ";private static final String mHtmlItem = " name price num ";private static final String mHtmlEnd = "