㈠ java截屏有哪几种方法
前台方式
1. 利用html2canvas实现前台截屏
html2canvas项目的gitHub地址
html2canvas示例
html2canvas可以将HTML代码块进行截取,并生成快照形式的canvas,然后可以利用html5的下载功能提供图片的下载接口,供用户下载。
优点:前台技术,实现比较容易。
缺点:此项目使用了html5的技术,因此在对IE的兼容上,只可以在IE9+的版本上使用。
使用时,需要引用jQuery.js和html2canvas.js。(html2canvas.js可以在github上下载)
具体JavaScript代码如下:
var canvas = function () {
html2canvas($("#chart"), {
onrendered: function (canvas) {
$("#class11").html(canvas);//将id为“class11”部分的代码转换为canvas
var type = 'png';//图片类型为png
var imgData = canvas.toDataURL('png');//将图片转换为png类型的流
var _fixType = function (type) {
type = type.toLowerCase().replace(/jpg/i, 'jpeg'); var r = type.match(/png|jpeg|bmp|gif/)[0]; return 'image/' + r;
}; var saveFile = function (data, filename) {
var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
save_link.href = data;
save_link.download = filename; var event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
save_link.dispatchEvent(event);
}; //下载时的文件名
var filename = 'fe_' + (new Date()).getTime() + '.' + type; // 下载文件
saveFile(imgData, filename);
}
});
后台方式(java)
1. 利用html2image实现
html2image的地址(google)
html2image是可以识别html标签并将html转换成图片的java项目。
优点:后台转换,故对浏览器的版本基本没有要求。
缺点:对样式的识别不是很好,转换出来的图片比较简单,基本没有可以兼容的样式。
使用方式:maven中引用如下依赖:
<dependency>
<groupId>com.github.xuwei-k</groupId>
<artifactId>html2image</artifactId>
<version>0.1.0</version></dependency>12345
2. 利用DJNativeSwing项目实现
纯java代码实现。使用DJNativeSwing这个项目,构建一个swing浏览器,打开网址,之后截取图片。(需要eclipse的swt库支持)
优点:纯java实现。
缺点:需要多线程的支持,只在控制台方式实现过(由于本人对于多线程的掌握较弱,目前没有在spring项目中实现这个方法,求大神指导~~)
3. 利用phantomJs实现
phantomJs的GitHub地址
phantomJs官网
phantom利用的是webKit内核,全面支持web而不需浏览器支持,快速,原生支持各种Web标准。
优点:速度快,使用简单。
缺点:需要在项目的服务器端引用exe文件进行截图,并发性能有待考证。
㈡ 如何以Java实现网页截图技术
使用JavaFX8(JDK8打包在一起)
public void start(Stage primaryStage) throws Exception {
final WebView view = new WebView();
Scene scene = new Scene(view, 310, 310);
primaryStage.setScene(scene);
final WebEngine webEngine = view.getEngine();
webEngine.load(this.getClass().getResource("web/index.html")
.toExternalForm());
primaryStage.show();
// 方式1. 监听webEngine加载进度,可能页面加载不完整
webEngine.getLoadWorker().stateProperty()
.addListener(new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> ov,
State oldState, State newState) {
if (newState == State.SUCCEEDED) {
snapshot(view);
}
}
});
// 方式2. 使用Transition设定延时
PauseTransition ptr = new PauseTransition(Duration.seconds(3));
ptr.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
snapshot(view);
}
});
ptr.play();
//方式3. 使用Task设定延时
Task<String> task = new Task<String>() {
@Override
protected String call() throws Exception {
Thread.sleep(5000);
return null;
}
};
task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
snapshot(view);
}
});
new Thread(task).start();
// 方式4. 自己实现多线程调用,较麻烦
new Thread(){
public void run() {
try {
Thread.sleep(7000);//该命令不可直接在Fx用户线程执行,否则会导致前台的渲染线程暂停,页面不会被加载
Platform.runLater(new Runnable() {
@Override
public void run() {
snapshot(view);//在后台线程中不可以直接操作UI,需要借助runLater
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
}
public void snapshot(Node view) {
Image image = view.snapshot(null, null);
try {
ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png",
new File("f:\" + System.currentTimeMillis() + ".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
㈢ 求以下截图的java-web代码,急!!!!!!!!!!!
我将一楼的代码改进一下。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>用户信息</title>
<style type="text/css">
.border{margin-top: 20px;
margin-left: 160px;}
.table-uer-info{border:1px solid #F6F;border-collapse:collapse;font:12px Arial, Helvetica, sans-
serif,"宋体";}
.table-uer-info th{line-height:25px;background:#F6F;}
.table-uer-info td{border-top:1px #fff solid;border-right:1px #fff
solid;background:#F7F7F7;padding:6px;line-height:28px;vertical-align:middle;}
</style>
</head>
<body>
<div class="border">
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<table width="80%" border="0" class="table-uer-info">
<tr>
<th colspan="2">用户信息</th>
</tr>
<tr>
<td><label for="textfield">用户名:</label>
<input type="text" name="textfield" id="textfield" /></td>
<td><label>密码:
<input type="text" name="textfield2" id="textfield2" /></label></td>
</tr>
<tr>
<td>性别:
<label for="radio"><input type="radio" name="radio" id="radio" value="radio" />
男 </label>
<label> <input type="radio" name="radio" id="radio2" value="radio2" />
女</label></td>
<td>省份:
<select name="select" id="select">
<option>上海</option>
</select></td>
</tr>
<tr>
<td>电话:
<input type="text" name="textfield5" id="textfield5" /></td>
<td>地址:
<input type="text" name="textfield3" id="textfield3" /></td>
</tr>
<tr>
<td>E-mail:
<input type="text" name="textfield6" id="textfield6" /></td>
<td>上传:
<label for="fileField"></label>
<input type="file" name="fileField" id="fileField" /></td>
</tr>
<tr>
<td colspan="2">爱好:
<label for="checkbox"><input type="checkbox" name="checkbox" id="checkbox" />
读书</label>
<label> <input type="checkbox" name="checkbox2" id="checkbox2" />
上网</label>
<label for="checkbox3"><input type="checkbox" name="checkbox3" id="checkbox3" />
游戏</label>
<label for="checkbox4"><input type="checkbox" name="checkbox4" id="checkbox4" />
旅游</label></td>
</tr>
<tr>
<td colspan="2">个人介绍
<label for="textarea"></label>
<textarea name="textarea" id="textarea" cols="45" rows="5"></textarea></td>
</tr>
<tr>
<td align="right"><input type="submit" name="button" id="button" value="提交"
/></td>
<td><input type="reset" name="button2" id="button2" value="重置" /></td>
</tr>
</table>
</form>
</div>
</body>
</html>
㈣ javaweb如何防止windows下用户使用prtsc sysrq键截屏
纯JAVA 做不到,WEB中更不行,,,,,,必须native程序
㈤ Appium+Java自动化测试 android混合APP的webview页面截图怎么截
先切回原生页面在进行截图
Drivername.context("NATIVE_APP");
㈥ 求助:java web开发实现截图,客户机截取本机图片,上传到服务器
要想客户端截图,除非开发一个插件,并且客户端要安装才行
否则随便打开一个网页都能截图的话那就是病毒了,你也不想随便打开一个网页就把你屏幕上的内容截图发到网站吧,呵呵
㈦ 如何用java实现web工程中整个屏幕的截图
第一种
如果你想对用户的每个操作都要记录起来的话方便用户查看可以采用RTMP协议实时对SWF绘制Bitmap进行录像,缺点就是你不方便对用户具体的操作位置进行高亮显示,只是录制了纯粹的视频
第二种
在具体操作的地方进行自定义事件,针对需要记录的地方进行监听,每次用户点击某一个地方就绘制Bitmap并对点击位置进行高亮显示,然后再把图片存起来后最后进行合并;缺点就是太多的地方需要加上此事件-比较繁琐.
㈧ java 怎么实现网页截图
事实上,如果您想以Java实现网页截图,也就是“输入一段网址,几秒钟过后就能截取一张网页缩略图”的效果。那么,您至少有3种方式可以选择。
1、最直接的方式——使用Robot
方法详解:该方法利用Robat提供的强大桌面操作能力,硬性调用浏览器打开指定网页,并将网页信息保存到本地。
优势:简单易用,不需要任何第三方插件。
缺点:不能同时处理大量数据,技术含量过低,属于应急型技巧。
实现方法:使用如下代码即可。
[java]viewplain
publicstaticvoidmain(String[]args)throwsMalformedURLException,
IOException,URISyntaxException,AWTException{
//此方法仅适用于JdK1.6及以上版本
Desktop.getDesktop().browse(
newURL("http://google.com/intl/en/").toURI());
Robotrobot=newRobot();
robot.delay(10000);
Dimensiond=newDimension(Toolkit.getDefaultToolkit().getScreenSize());
intwidth=(int)d.getWidth();
intheight=(int)d.getHeight();
//最大化浏览器
robot.keyRelease(KeyEvent.VK_F11);
robot.delay(2000);
Imageimage=robot.createScreenCapture(newRectangle(0,0,width,
height));
BufferedImagebi=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
Graphicsg=bi.createGraphics();
g.drawImage(image,0,0,width,height,null);
//保存图片
ImageIO.write(bi,"jpg",newFile("google.jpg"));
}
2、最常规的方式——利用JNI,调用第三方C/C++组件
方法详解:目前来讲,Java领域对于网页截图组件的开发明显不足(商机?),当您需要完成此种操作时,算得上碰到了Java的软肋。但是,众所周知Java也拥有强大的JNI能力,可以轻易将C/C++开发的同类组件引为己用。不懂可以扣五七八零二四一四四
优势:实现简单,只需要封装对应的DLL文件,就可以让Java实现同类功能。
劣势:同其他JNI实现一样,在跨平台时存在隐患,而且您的程序将不再属于纯Java应用。
实现方法:可参见此用例,具体封装何种C/C++组件请自行选择。
PS:示例来源于ACA HTML to Image Converter项目(http://www.acasystems.com/en/web-thumb-activex/faq-convert-html-to-image-in-java.htm ),这是一个收费的HTML转Image第三方组件,但封装方式在Java中大同小异。
引用JNI封装:
[java]viewplain
importsun.awt.*;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.awt.*;
importjava.awt.peer.*;
publicclassSnap
{
static
{
System.loadLibrary("Snap");
}
publicstaticvoidmain(String[]argv)
{
Snapt_xSnap=newSnap();
t_xSnap.Start("http://www.google.com","snapshot-google.png");
}
publicnativevoidStart(Stringpi_strURL,Stringpi_strImageName);
}
CPP部分的实现:
[java]viewplain
#include<windows.h>
#include<atlbase.h>
#include"snap.h"
#pragmacomment(lib,"atl.lib")
#import"./../../acawebthumb.dll"no_namespace
JNIEXPORTvoidJNICALLJava_Snap_Start(JNIEnv*pEnv,jobject,jstringpi_strUrl,jstringpi_strFileName)
{
CoInitialize(0);
_bstr_tt_strUrl=pEnv->GetStringUTFChars(pi_strUrl,0);
_bstr_tt_strFileName=pEnv->GetStringUTFChars(pi_strFileName,0);
IThumbMakerPtrHTML_Converter=NULL;
HRESULThr=HTML_Converter.CreateInstance(L"ACAWebThumb.ThumbMaker");
if(SUCCEEDED(hr))
{
HTML_Converter->SetURL(t_strUrl);
if(0==HTML_Converter->StartSnap())
HTML_Converter->SaveImage(t_strFileName);
}
if(HTML_Converter)
HTML_Converter.Release();
CoUninitialize();
}
以该组件图像化yahoo界面的效果图:
3、最扎实的方法——自行解析HTML标记,并将其图像化
方法详解:众所周知,HTML之所以在浏览器中以具体的网页格式出现,并非服务器端传了一整个应用到客户端,而是源自于浏览器对于客户端自行解析的结果。因此,只要我们将对应的解析一一实现,那么将网页图形化,就将不是什么难事。
优势:纯Java实现,一劳永逸,一旦开发完成则永远通用,而且有一定的商用价值。
劣势:开发费时,且需要针对不同语法做精确分析,才能保证输出的基本正确。尤其在涉及到JavaScript解析时,难度将尤其增大。
实现方法:目前尚无具体案例可供参考。但是,由于Java有jdic之类的浏览器项目存在(https://jdic.dev.java.net/),而Java图形界面又属绘制生成。从理论上说,我们可以将所有具备Graphics的组件图形化保存。
而如果自行解析,那么您需要建立HTML解析器(或使用第三方的,万幸Java在这方面的组件很多),了解Java2D机制,了解何时该使用drawString绘制文字,何时又该使用drawImage插入图片等等。
谢谢采纳!
㈨ java web的面试需要带电脑过去运行自己的作品么我是应届毕业生。还是截图打印出来好
毕业的那点作品别带了,根本不算是成熟的项目,特别是web,如果是c/c++或者android/iphone那不一样,web太杂了,你做出来的作品在工作半年的人眼里都根本不入流,面试的时候人家只关心你的技术,这是经验之谈