首页 > 后端开发 > 正文

java 怎么实现网页截图

2024-04-15 18:26:28 | 我爱编程网

今天我爱编程网小编整理了java 怎么实现网页截图相关内容,希望能帮助到大家,一起来看下吧。

本文目录一览:

java 怎么实现网页截图

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('

', '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 = 'baidufe_' + (new Date()).getTime() + '.' + type; // 下载文件

saveFile(imgData, filename);

}

});

后台方式(java)

1. 利用html2image实现

html2image的地址(google)

html2image是可以识别html标签并将html转换成图片的java项目。

优点:后台转换,故对浏览器的版本基本没有要求。

缺点:对样式的识别不是很好,转换出来的图片比较简单,基本没有可以兼容的样式。

使用方式:maven中引用如下依赖:

com.github.xuwei-k

html2image

0.1.012345

2. 利用DJNativeSwing项目实现

纯java代码实现。使用DJNativeSwing这个项目,构建一个swing浏览器,打开网址,之后截取图片。(需要eclipse的swt库支持)

优点:纯java实现。

缺点:需要多线程的支持,只在控制台方式实现过(由于本人对于多线程的掌握较弱,目前没有在spring项目中实现这个方法,求大神指导~~)

3. 利用phantomJs实现

phantomJs的GitHub地址

phantomJs官网

phantom利用的是webKit内核,全面支持web而不需浏览器支持,快速,原生支持各种Web标准。

优点:速度快,使用简单。

缺点:需要在项目的服务器端引用exe文件进行截图,并发性能有待考证。

java 怎么实现网页截图

用java编写一个程序,计算平均分,输出不及格的学生的学号、课程和成绩。

程序运行截图:

学生类

/**

* 学生类

*

* @author wangliang

*

*/

public class Student {

int ID;// 学生学号

String name;// 学生姓名

double mathematics;// 数学分数

double chinese;// 语文分数

double english;// 英语分数

}

2.测试类:

public class Test {

public static final void main(String[] arg) {

List listStudents = new ArrayList();

//

List listName = new ArrayList();

listName.add("小明");

listName.add("小刚");

listName.add("小花");

listName.add("小红");

listName.add("小峰");

List listMathematics = new ArrayList();

listMathematics.add(56.0);

listMathematics.add(89.0);

listMathematics.add(59.0);

listMathematics.add(70.0);

listMathematics.add(60.0);

for (int i= 0; i < 5; i++) {

Student student = new Student();

student.ID = i;

student.name = listName.get(i);

student.mathematics = listMathematics.get(i);

listStudents.add(student);

}

//求平均分

//数学总分

double tatol = 0;

for(Student student:listStudents) {

tatol += student.mathematics;

//

if (student.mathematics < 60) {

System.out.println("不及格学生姓名:" + student.name + " 学号:" + student.ID +  "不及格课程 数学 ( "+student.mathematics  +" )");

}

}

//输出平均分

double average;

System.out.println("数学平均分:" + (average = tatol / 5));

}

}

java 怎么实现网页截图我爱编程网

java 怎么实现网页截图

我爱编程网(https://www.52biancheng.com)小编还为大家带来java 怎么实现网页截图的相关内容。

事实上,如果您想以Java实现网页截图,也就是“输入一段网址,几秒钟过后就能截取一张网页缩略图”的效果。那么,您至少有3种方式可以选择。

1、最直接的方式——使用Robot

方法详解:该方法利用Robat提供的强大桌面操作能力,硬性调用浏览器打开指定网页,并将网页信息保存到本地。

优势:简单易用,不需要任何第三方插件。

缺点:不能同时处理大量数据,技术含量过低,属于应急型技巧。

实现方法:使用如下代码即可。

[java] view plaincopy

public static void main(String[] args) throws MalformedURLException,

IOException, URISyntaxException, AWTException {

//此方法仅适用于JdK1.6及以上版本

Desktop.getDesktop().browse(

new URL("").toURI());

Robot robot = new Robot();

robot.delay(10000);

Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());

int width = (int) d.getWidth();

int height = (int) d.getHeight();

//最大化浏览器

robot.keyRelease(KeyEvent.VK_F11);

robot.delay(2000);

Image image = robot.createScreenCapture(new Rectangle(0, 0, width,

height));

BufferedImage bi = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics g = bi.createGraphics();

g.drawImage(image, 0, 0, width, height, null);

//保存图片

ImageIO.write(bi, "jpg", new File("google.jpg"));

}

2、最常规的方式——利用JNI,调用第三方C/C++组件

方法详解:目前来讲,Java领域对于网页截图组件的开发明显不足(商机?),当您需要完成此种操作时,算得上碰到了Java的软肋。但是,众所周知Java也拥有强大的JNI能力,可以轻易将C/C++开发的同类组件引为己用。不懂可以扣五七八零二四一四四

优势:实现简单,只需要封装对应的DLL文件,就可以让Java实现同类功能。

劣势:同其他JNI实现一样,在跨平台时存在隐患,而且您的程序将不再属于纯Java应用。

实现方法:可参见此用例,具体封装何种C/C++组件请自行选择。

PS:示例来源于ACA HTML to Image Converter项目(

-thumb-activex/faq-convert-html-to-image-in-java.htm

),这是一个收费的HTML转Image第三方组件,但封装方式在Java中大同小异。

引用JNI封装:

[java] view plaincopy

import sun.awt.*;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import java.awt.peer.*;

public class Snap

{

static

{

System.loadLibrary("Snap");

}

public static void main( String[] argv )

{

Snap t_xSnap = new Snap();

t_xSnap.Start("", "snapshot-google.png");

}

public native void Start(String pi_strURL, String pi_strImageName);

}

CPP部分的实现:

[java] view plaincopy

#include 

#include 

#include "snap.h"

#pragma comment(lib,"atl.lib")

#import "./../../acawebthumb.dll" no_namespace

JNIEXPORT void JNICALL Java_Snap_Start(JNIEnv *pEnv, jobject, jstring pi_strUrl, jstring pi_strFileName)

{

CoInitialize(0);

_bstr_t t_strUrl = pEnv->GetStringUTFChars(pi_strUrl, 0);

_bstr_t t_strFileName = pEnv->GetStringUTFChars(pi_strFileName, 0);

IThumbMakerPtr HTML_Converter = NULL;

HRESULT hr = 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之类的浏览器项目存在(

),而Java图形界面又属绘制生成。从理论上说,我们可以将所有具备Graphics的组件图形化保存。

而如果自行解析,那么您需要建立HTML解析器(或使用第三方的,万幸Java在这方面的组件很多),了解Java2D机制,了解何时该使用drawString绘制文字,何时又该使用drawImage插入图片等等。

谢谢采纳!

以上就是java 怎么实现网页截图全部内容,更多相关信息,敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“java 怎么实现网页截图”相关推荐
如何以JAVA实现网页截图技术
如何以JAVA实现网页截图技术

如何以JAVA实现网页截图技术事实上,如果您想以Java实现网页截图,也就是“输局培隐入一段网址,几秒钟过后就能截取一张网页缩略图”的效果。那么中磨,您至少有3种方式可以选择。1、最直接的方式——使用Robot方法详解:该方法利用Robat提供的强大桌面操作能力,硬性调用浏览器打开指定网页,并将网页信息保存到本地。优势:简单易用,不需要任桐厅何第三方插件。缺点:不能同

2024-06-18 17:14:42
php如何实现图片下载
php如何实现图片下载

php如何实现图片下载我想告诉你,除了显示网址,然后“另存为”或者用迅雷之类的下载外,php真的还无法下载到本地,好像是因为权限什么的。我琢磨了好久都不可能下载到本地,除非你的服务器是建立在本地的。我自己写了一个函数,用来拷贝图片的,用copy()不行。注意,目的为网址,你可以看看,其他文件格式同理。//----------------------拷贝图片(包括网络图片)到

2024-07-19 04:12:21
RxJava怎么实现多个线程同时执行,怎么实现retryWhen
RxJava怎么实现多个线程同时执行,怎么实现retryWhen

RxJava怎么实现多个线程同时执行,怎么实现retryWhen在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题,Java实现线程同步的方法很多,具体如下。(1)synchronized关键字在Java中内置了语言级的同步原语synchronized关键字,其在多线程条件下实现了对共享资源的同步访问。根据synchronized关键字修饰的对象不同可以分

2024-04-13 05:00:28
怎样才能让网页不显示java小程序脚本呢?
怎样才能让网页不显示java小程序脚本呢?

怎样禁用电脑上的Java小程序?1、在打开的ie浏览器窗口右上方点击齿轮图标,选择“Internet选项”,如下图所示:2、在打开的Internet选项窗口中,切换到安全栏,在安全选卡中点击“自定义级别”,如下图所示:3、在“安全设置-Internet区域”界面找到“Java小程序脚本”、“活动脚本”,并将这两个选项都选择为“禁用”,然后点击确定,如下图所示:怎样

2024-07-01 04:05:49
用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。 (运行后有窗体出现的那 用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。
用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。 (运行后有窗体出现的那 用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。

用java程序编一个某年某月的日历packagemycalendar;importjava.util.*;classViewMonth{intmonth;intyear;ViewMonth(finalintdisplayMonth,finalintdisplayYear){month=displayMonth;year=displayYear;}priva

2024-06-21 22:47:47
Win7系统打开网页提示应用程序已被JAVA安全阻止怎么办
Win7系统打开网页提示应用程序已被JAVA安全阻止怎么办

java程序运行不了java在windows中的环境变量设定:java环境变量的设置:我的电脑-》属性-》高级-》环境变量-》在“系统变量”中下拉-》在“变量”下的“Path”选项双击-》在“变量值”中把你的java安装的JDK的bin的文件目录覆盖到这里,点击保存即可!!!例如我的配置把D:\programfiles\Java\jdk1.6.0_03\bin粘贴到变量值中(覆盖原来存在的路

2024-03-18 21:32:06
如何使用爬虫获取网页数据 python
如何使用爬虫获取网页数据 python

如何使用爬虫获取网页数据python八爪鱼采集器是一款功能全面、操作简单、适用范围广泛的互联网数据采集器,但是它是一款可视化的工具,不需要编程和代码知识。如果您想使用Python编写爬虫来获取网页数据,可以使用Python的第三方库,如BeautifulSoup、Scrapy等。以下是使用Python编写爬虫获取网页数据的一般步骤:1.安装Python和所需的第三方库。可以使用pip命令来安

2023-12-24 04:18:13
怎么实现javascript中调用java类中的方法
怎么实现javascript中调用java类中的方法

怎么实现javascript中调用java类中的方法实现javascript中调用java类中的方法如下:只要调用addJavascriptInterface方法即可映射一个Java对象到JavaScript对象上。1、映射Java对象到JavaScript对象上代码如下:mWebView=(WebView)findViewById(R.id.wv_content);mW

2024-03-21 08:15:37