java网页快照_java网页快照-网页转存为图片
java网页快照-网页转存为图片
个人觉得免费的java实现方式,最方便的网页快照生成方式。可以生成大型网页的快照。非常棒!
使用代码前需要导入 jar包。需要三个jar包 :swt-3.6M3-win32-win32-x86.jar,DJNativeSwing-SWT.jar,DJNativeSwing.jar
运行环境:jdk1.6以上
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.p_w_picpath.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.p_w_picpathio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import chrriis.dj.nativeswing.swtimpl.NativeComponent;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserAdapter;
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserEvent;
public class Main extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
// 行分隔符
final static public String LS = System.getProperty("line.separator", "\n");
// 文件分割符
final static public String FS = System.getProperty("file.separator", "\\");
//以javascript脚本获得网页全屏后大小
final static StringBuffer jsDimension;
static {
jsDimension = new StringBuffer();
jsDimension.append("var width = 0;").append(LS);
jsDimension.append("var height = 0;").append(LS);
jsDimension.append("if(document.documentElement) {").append(LS);
jsDimension.append(
" width = Math.max(width, document.documentElement.scrollWidth);")
.append(LS);
jsDimension.append(
" height = Math.max(height, document.documentElement.scrollHeight);")
.append(LS);
jsDimension.append("}").append(LS);
jsDimension.append("if(self.innerWidth) {").append(LS);
jsDimension.append(" width = Math.max(width, self.innerWidth);")
.append(LS);
jsDimension.append(" height = Math.max(height, self.innerHeight);")
.append(LS);
jsDimension.append("}").append(LS);
jsDimension.append("if(document.body.scrollWidth) {").append(LS);
jsDimension.append(
" width = Math.max(width, document.body.scrollWidth);")
.append(LS);
jsDimension.append(
" height = Math.max(height, document.body.scrollHeight);")
.append(LS);
jsDimension.append("}").append(LS);
jsDimension.append("return width + ':' + height;");
}
public Main(final String url, final int maxWidth, final int maxHeight) {
super(new BorderLayout());
JPanel webBrowserPanel = new JPanel(new BorderLayout());
final String fileName = System.currentTimeMillis() + ".jpg";
final JWebBrowser webBrowser = new JWebBrowser(null);
webBrowser.setBarsVisible(false);
webBrowser.navigate(url);
webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
add(webBrowserPanel, BorderLayout.CENTER);
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
webBrowser.addWebBrowserListener(new WebBrowserAdapter() {
// 监听加载进度
public void loadingProgressChanged(WebBrowserEvent e) {
// 当加载完毕时
if (e.getWebBrowser().getLoadingProgress() == 100) {
String result = (String) webBrowser
.executeJavascriptWithResult(jsDimension.toString());
int index = result == null ? -1 : result.indexOf(":");
NativeComponent nativeComponent = webBrowser
.getNativeComponent();
Dimension originalSize = nativeComponent.getSize();
Dimension p_w_picpathSize = new Dimension(Integer.parseInt(result
.substring(0, index)), Integer.parseInt(result
.substring(index + 1)));
p_w_picpathSize.width = Math.max(originalSize.width,
p_w_picpathSize.width + 50);
p_w_picpathSize.height = Math.max(originalSize.height,
p_w_picpathSize.height + 50);
nativeComponent.setSize(p_w_picpathSize);
BufferedImage p_w_picpath = new BufferedImage(p_w_picpathSize.width,
p_w_picpathSize.height, BufferedImage.TYPE_INT_RGB);
nativeComponent.paintComponent(p_w_picpath);
nativeComponent.setSize(originalSize);
// 当网页超出目标大小时
if (p_w_picpathSize.width > maxWidth
|| p_w_picpathSize.height > maxHeight) {
//截图部分图形
p_w_picpath = p_w_picpath.getSubp_w_picpath(0, 0, maxWidth, maxHeight);
/*此部分为使用缩略图
int width = p_w_picpath.getWidth(), height = p_w_picpath
.getHeight();
AffineTransform tx = new AffineTransform();
tx.scale((double) maxWidth / width, (double) maxHeight
/ height);
AffineTransformOp op = new AffineTransformOp(tx,
AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
//缩小
p_w_picpath = op.filter(p_w_picpath, null);*/
}
try {
// 输出图像
ImageIO.write(p_w_picpath, "jpg", new File(fileName));
} catch (IOException ex) {
ex.printStackTrace();
}
// 退出操作
System.exit(0);
}
}
}
);
add(panel, BorderLayout.SOUTH);
}
public static void main(String[] args) {
NativeInterface.open();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// SWT组件转Swing组件,不初始化父窗体将无法启动webBrowser
JFrame frame = new JFrame("以DJ组件保存指定网页截图");
// 加载google,最大保存为640x480的截图
frame.getContentPane().add(
new Main(http://yijianfengvip.blog.163.com/, 640, 480),
BorderLayout.CENTER);
frame.setSize(800, 600);
// 仅初始化,但不显示
frame.invalidate();
frame.pack();
frame.setVisible(false);
}
});
NativeInterface.runEventPump();
}
}
java网页快照_java网页快照-网页转存为图片相关推荐
- java网页快照-网页转存为图片
java网页快照-网页转存为图片 个人觉得免费的java实现方式,最方便的网页快照生成方式.可以生成大型网页的快照.非常棒! 使用代码前需要导入 jar包.需要三个jar包 :swt-3.6M3-wi ...
- java 截图_Java实现网页截屏
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.awt.AWTException; import java.awt ...
- html2canvas实现网页局部存为图片和打印
1.html2canvas.js简介 html2canvas.js具体来说是一个脚本或者js插件, 该脚本允许您直接在用户浏览器上截取网页或部分网页的"内容截图".该脚本是基于DO ...
- 【源码及课件分享】Java实战项目之进销存管理系统_Java项目开发_Java项目实战
还没有搞定毕设的小伙伴一定要看鸭~ Java实战项目--进销存管理系统![源码及课件分享]Java实战项目之进销存管理系统_Java项目开发_Java项目实战_Java毕业设计https://www. ...
- java进销存系统静态页_java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码...
系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM ...
- java进销存储管理系统_java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码...
系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM ...
- java门店_Java门店管理系统 客户资料档案管理 库存管理 进销存 SSM项目源码
系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM ...
- java爬虫抓取网页数据论坛_Java爬虫抓取网页
Java爬虫抓取网页原作者:hebedich 原文链接 下面直接贴代码: import java.io.BufferedReader; import java.io.InputStreamReade ...
- java计算机毕业设计记事网页源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计记事网页源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计记事网页源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...
最新文章
- 2020-12-18 Simulink实现ESO(扩张状态观测器)
- 渗透测试之地基服务篇:服务攻防之中间件JBoss
- [转]在Fedora上安装Oracle 11g XE
- python爬取糗事百科
- python flask html模板,python flask web开发实战 Jinja2模板
- [Unity] Canvas 设置为 Screen Space - Camera 时,UI 被场景物体遮挡的解决办法:设置 Canvas 的 Plane Distance 为一个较小的数
- 如何计算电机极数和无刷电机的Kv值?
- 手游方舟重启维护服务器要多久,方舟生存进化手游日常维护多久
- 服务器加油站能微信,加油可以微信吗?可以~支付宝呢?可以~
- 何为血缘分析?血缘分析能给我们带来什么影响?
- 常见的http状态码以及https的通讯过程和DNS的解析过程
- 手游问道服务器维护到几点,问道手游6月8日维护到几点
- c语言小蜜蜂游戏编程,GMS2从零做游戏:小蜜蜂(一)
- Pomodoro Technique
- uboot 1.1.6 移植8900网卡+tftp
- 第 十四 章 继承:究竟是好是坏
- 【字符识别】模板匹配(区域生长法)字母+数字识别【含Matlab源码 1214期】
- 密码学入门(2):对称密码
- 引流,引流脚本,引流软件,微信引流,引流方法交流
- 学术-物理:莫比乌斯带
热门文章
- 基于MATLAB的摩尔斯电码系统设计
- php 图像编程库,PHP图像处理开发库
- ebay php 商品添加多运输,eBay如何设置物流方式
- app图标圆角角度_教你如何绘制风格统一的APP界面图标
- 计算机基础及wps office应用_自考本科计算机应用基础考试大纲
- 学python编程_少儿学Python编程的一些思考
- linux磁盘高,CentOS 7.2中磁盘iowait过高解决
- centos7设置成文件服务器,CentOS7服务器架设ftp过程
- layuiadmin上手好难_成功男士的好搭档:松下ES-CV50电动剃须刀上手体验分享
- 信息收集之子域名查询--子域名扫描器: 子域名挖掘机 Subdomainbrute