[Ext JS 4]后台自动产生图档
来源:互联网 发布:杭州高招软件怎么样 编辑:程序博客网 时间:2024/05/14 21:50
前言
[Ext JS 4] 实战之将chart导出为png, jpg 格式的文件
承接上一篇, 我们可以做到在Browser端打开一个Chart,并导出为png或是jpg 等格式的图档。但实际的需求会更高级, 希望可以自动产生图档, 并发送email .
对报表的需求从主动获取到被动接受, 系统要做得更智能。 需要解决的技术问题:
如果在不打开浏览器或是模拟浏览器的状况下产生svg 的代码, 在使用上一篇的技术实现图档?
不打开Browser 获取 SVG 代码段
Ext JS 使用的是浏览器前端的SVG技术来呈现图档, 不使用浏览器就能获取SVG代码段, 目前还没有什么好的解法。
模拟Browser获取SVG代码
既然不打开Browser要获取SVG不可能, 或是难度很大, 是否可以模拟浏览器打开, 产生HTML以及SVG代码段,再产生图档呢?
正好之前使用过Selenium 用来自动化前端测试, 调研了一下, 果然可以.
实现步骤:
1. 下载Selenium Client & WebDriver Language Bindings
http://docs.seleniumhq.org/download/
因为这边使用的是Java 来开发, 所以下载java版的。
这个API 可以用来与WebDriver 交互, 打开一个Browser的窗口, 访问给定的地址, 返回对应的html
2. 下载WebDriver
这里使用的是Chrome 浏览器, 所以下载Chrome 的WebDriver
下载地址:
http://chromedriver.storage.googleapis.com/index.html
选择合适的版本,
解压后把 chromedriver.exe,放入google 的安装目录 。
(一般位于:
C:\Program Files (x86)\Google\Chrome\Application)
3. 代码准备好之后就是代码呼叫了;
直接上代码
import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.concurrent.TimeUnit;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class DashHTMLDriverProcessor {/** * * @param chromeDriverUrl * @param chartUrl * @param idDivMap * {"9011-panel","9011-div"} * * @return { * "image":{ * "ContentID":["image1","image2","image3"], * "image1":"../image1.png";, * "image2":"../image2.png";, * "image3":"../image3.png"; * } * } */public JSONObject getImageUrlObj(String chromeDriverUrl, String chartUrl, Map<String, String> idDivMap) {JSONObject imageUrlObj = null;if (chromeDriverUrl != null && chartUrl != null && idDivMap != null) {JSONObject imageObj = new JSONObject();JSONArray contentArray = new JSONArray();System.getProperties().setProperty("webdriver.chrome.driver", chromeDriverUrl);WebDriver webDriver = new ChromeDriver();webDriver.get(chartUrl);webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);@SuppressWarnings("rawtypes")Iterator it = idDivMap.entrySet().iterator();while (it.hasNext()) {@SuppressWarnings("unchecked")Entry<String, String> entry = (Entry<String, String>) it.next();String chartId = entry.getKey();String divId = entry.getValue();WebElement webElement = webDriver.findElement(By.id(divId));WebElement svgElement = webElement.findElement(By.xpath(".//*[name()='svg']"));// String htmlstr = webElement.toString();// String htmlstr = webElement.getAttribute("innerHTML");String htmlstr = svgElement.getAttribute("outerHTML");contentArray.add(chartId);imageObj.put(chartId, htmlstr);}imageObj.put("ContentID", contentArray);JSONObject criObj = new JSONObject();criObj.put("image", imageObj);ChartImageExportServiceImpl imageExportSvr = new ChartImageExportServiceImpl();try {imageUrlObj = imageExportSvr.doExportImageAction(criObj);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}webDriver.close(); webDriver.quit();}return imageUrlObj;}}
解释两处代码
1. webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
因为浏览器打开显示需要时间, 所以要等页面出来之后才能进行解析。(这个时间设定可以根据实际状况进行设定)
2. WebElement svgElement = webElement.findElement(By.xpath(".//*[name()='svg']"));
这个是用来找SVG代码段的。语法是Xpath 的语法
- [Ext JS 4]后台自动产生图档
- Ext js 列自动换行
- 后台配置不自动产生cr
- Ext JS 4 概述
- js给FreeTextBox赋值+EXT后台调用赋值方法
- Ext.net 弹出对话框的几种方式(js 后台)
- [Ext JS 4] 布局之实战一 - 中间区块不会自动伸展 (tab)
- [Ext JS 4] 布局之实战二 - 中间区块不会自动伸展 (tab)续
- Ext JS 3升级到Ext JS 4
- Ext JS 4 信息汇总
- Ext JS 4倒计时:数据包
- Ext JS 4:模型剖析
- EXT JS 4(摘录)
- Ext JS 4 升级指南
- [Ext JS 4] Grid 组件
- [Ext JS 4]性能优化
- [Ext JS 4]性能优化
- [Ext JS 4] 动态加载
- 公司项目设计-单会项目优惠码设计模型图
- Struts2-ActionSupport定义的五个常量
- [PHP] 高并发 php uniqid 不重复唯一标识符生成方案
- URI is not registered ( Setting | Project Settings | Schemas and DTDs ) 解决方案
- JDBC之 “ 对岸的女孩看过来”
- [Ext JS 4]后台自动产生图档
- [linux]zip文件解压之后文件和文件名乱码解决方法
- windows系统对于mysql server免安装版的设置
- struts.xml中的常用的常量设置
- Android Studio logcat 过滤 一个或多个TAG
- 孩子在我心中的位置
- Android微信语音聊天记录及文本聊天记录 数据库破解 silk 整理
- 利用canvas绘制饼状图一种方法
- iOS实时卡顿监控