2024-04-15 18:26:28 | 我爱编程网
前台方式
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中引用如下依赖:
2. 利用DJNativeSwing项目实现
纯java代码实现。使用DJNativeSwing这个项目,构建一个swing浏览器,打开网址,之后截取图片。(需要eclipse的swt库支持)
优点:纯java实现。
缺点:需要多线程的支持,只在控制台方式实现过(由于本人对于多线程的掌握较弱,目前没有在spring项目中实现这个方法,求大神指导~~)
3. 利用phantomJs实现
phantomJs的GitHub地址
phantomJs官网
phantom利用的是webKit内核,全面支持web而不需浏览器支持,快速,原生支持各种Web标准。
优点:速度快,使用简单。
缺点:需要在项目的服务器端引用exe文件进行截图,并发性能有待考证。
程序运行截图:
学生类
/**
* 学生类
*
* @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
//
List
listName.add("小明");
listName.add("小刚");
listName.add("小花");
listName.add("小红");
listName.add("小峰");
List
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));
}
}
我爱编程网(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实现网页截图技术事实上,如果您想以Java实现网页截图,也就是“输局培隐入一段网址,几秒钟过后就能截取一张网页缩略图”的效果。那么中磨,您至少有3种方式可以选择。1、最直接的方式——使用Robot方法详解:该方法利用Robat提供的强大桌面操作能力,硬性调用浏览器打开指定网页,并将网页信息保存到本地。优势:简单易用,不需要任桐厅何第三方插件。缺点:不能同
使用php分页技术后,点击第一页的按钮页面可顺利跳转,但是点击第二页或者之后页面的按钮,页面无法跳转看了这个代码,发现没有获取当前页码的代码,所以我改了一下,加了个获取当前页码的代码function showpagelink($pagesize,$result,$currentpage,$pageleft,$pageright,$phpfile) //分页显示函数,参数分别为每页记录数
网页最小化时标题栏滚动提示有新消息,php网页中如何实现varmsg="ScrollingTitle";varpos=0;varspacer="...";vartime_length=100;functionScrollTitle(){document.title=msg.substring(pos,msg.length)+spacer+msg.substring(0
用PHP实现分页显示要求实现和图片一样的功能希望你能用得上!<?phpfunctionpage($page,$total,$phpfile,$pagesize=10,$pagelen=7){$pagecode=’’;//定义变量,存放分页生成的HTML$page=intval($page);//避免非数字页码$total=intval($total);//保证总记
php中怎么用redirect实现页面跳转?1、thinkPHP的Action类的redirect方法可以实现页面的重定向功能,redirect重定向的通用语法为:edirect(url,params=array(),delay=0,msg='')// 跳转到 edit 操作 $this->redirect('edit')。2、// 跳转到 UserAction下的edit 操
php分页跳转你这个太麻烦我给你推荐一个<?phpclasspage{var$page_name="page";var$next_page='>';//下一页var$pre_page='<';//上一页var$first_page='<<首页';//首页var$last_page='尾页>>';//尾页var$p
电脑所有后缀为.rar、.doc、.xls、.jpg、.dwg文件均被添加后缀._CRYPTCRYPT_MD5是UnixlikeShadow密码Ccrypt()crypt是个密码加密函数,它是基於DataEncryptionStandard(DES)演算法。crypt基本上是Onewayencryption,因此它只适用於密码的使用,不适合於资料加密。char*cryp
在PHP页面怎么实现定时刷新显示内容?jquery+ajax可以很容易实现啊,通过settimeout(function(),5)去触发函数就行,与通过点击发送请求没区别啊。setInterval(function(){jQuery.ajax({type:"POST",url:"111.php",global:false,dataType:"json",
2025-02-01 20:24:39
2024-01-05 14:11:24
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01