[Ext JS 4]后台自动产生图档
前言
[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 block
e.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 集合1713个icon图标的CSS文件
原文:http://extjs.org.cn/node/715 由于最近在研究Extjs4.1.1,没想到Extjs没有自带的iconCls所使用的图标样式css,就是用那个写那个的,纠结了半天,网上 ...
- 【翻译】Ext JS最新技巧——2014-8-13
原文:Top Support Tips Greg Barry:新的框架. 新的文档类型(Doctype) 在Ext JS 5,只支持IE8+,因此不再古力用户使用严格的HTML文档类型.现在,推荐使用 ...
- 《Ext JS模板与组件基本知识框架图----模板》
最近在整理Ext JS的模板和组件,在参考<Ext JS权威指南>,<Ext JS Web应用程序开发指南>,<Ext JS API>等相关书籍后才写下这篇< ...
- Ext JS 6学习文档–第1章–ExtJS入门指南
Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS ...
- Ext JS 6学习文档–第2章–核心概念
核心概念 在下一章我们会构建一个示例项目,而在这之前,你需要学习一些在 Ext JS 中的核心概念,这有助于你更容易理解示例项目.这一章我们将学习以下知识点: 类系统,创建和扩展类 事件 Ext JS ...
- Ext JS 6学习文档-第8章-主题和响应式设计
Ext JS 6学习文档-第8章-主题和响应式设计 主题和响应式设计 本章重点在 ExtJS 应用的主题和响应式设计.主要有以下几点内容: SASS 介绍和入门 主题 响应式设计 SASS 介绍和入门 ...
- Ext JS 6学习文档-第7章-图表
Ext JS 6学习文档-第7章-图表 使用图表 本章中将探索在 ExtJS 中使用不同类型的图表并使用一个名为费用分析的示例项目结束本章所学.以下是将要所学的内容: 图表类型 条形图 和 柱形图 图 ...
- Ext JS 6学习文档-第6章-高级组件
Ext JS 6学习文档-第6章-高级组件 高级组件 本章涵盖了高级组件,比如 tree 和 data view.它将为读者呈现一个示例项目为 图片浏览器,它使用 tree 和 data view 组 ...
- Ext JS 6学习文档-第5章-表格组件(grid)
Ext JS 6学习文档-第5章-表格组件(grid) 使用 Grid 本章将探索 Ext JS 的高级组件 grid .还将使用它帮助读者建立一个功能齐全的公司目录.本章介绍下列几点主题: 基本的 ...
随机推荐
- 【bzoj2938】病毒
Portal -->bzoj2938 Solution 这题的话..一开始想的是不是上一个trie就消失了但是后来发现好像我还是太年轻qwq 比较容易联想到..AC自动机,多串匹配嘛 然后就.. ...
- 前端基础----jquery
一.jQuery是什么? <1> jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. <2>jQuery是继 ...
- Linux基础-shell脚本知识整理和脚本编写----------变量、运算符、流程控制、函数、计划任务(发送邮件)
I:知识整理:变量.运算符.流程控制.函数.计划任务 变量 系统变量:set:显示所有变量 env:环境变量 常用系统变量: path pwd lang home his ...
- win7右键新建文件夹不见了
http://zhidao.baidu.com/question/175786636169796084.html 看下注册表文件:reg add "HKEY_CLASSES_ROOT\Dir ...
- Python2和Python3共存安装
记录下: 先下载Python2.7.6,安装完成,不要添加到path中: 再下载Python3.4.3,安装,不要添加到path中. 进入 Python2: py -2 进入Python3: py - ...
- bzoj 2929 [Poi1999]洞穴攀行 网络流
2929: [Poi1999]洞穴攀行 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 499 Solved: 295[Submit][Status][ ...
- Android Monkey 脚本编写与检查内存泄露
一.Monkey脚本编写 1.Monkey脚本格式 脚本优势: 简单快捷,不需要接触任何工具,只需要一个记事本文件 脚本缺点: 实现坐标.按键等基本操作的相应步骤,顺序脚本无逻辑性 脚本源码: \de ...
- Intellj IDEA使用技巧记录
▲.Intellj IDEA光标变成了insert光标状态 且不能编辑操作: https://blog.csdn.net/aosica321/article/details/52787418 ▲.在i ...
- 12款jQuery幻灯片插件和幻灯片特效教程
jQuery 使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入一些非常好的效果.滑块和幻灯片效果是常用的内容展示方式之一,这是一种在有限的网页空间内展示系列项目时非常好的方法.今 ...
- HDU 1394 Minimum Inversion Number (树状数组)
题目链接 Problem Description The inversion number of a given number sequence a1, a2, ..., an is the numb ...