java快照_网页快照 java 实现 | 学步园
cping1982 大哥真的很厉害愿意开源写代码给大家 先在的优秀程序员能想他一样的真少见 敬礼
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.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 imageSize = new Dimension(Integer.parseInt(result
.substring(0, index)), Integer.parseInt(result
.substring(index + 1)));
imageSize.width = Math.max(originalSize.width,
imageSize.width + 50);
imageSize.height = Math.max(originalSize.height,
imageSize.height + 50);
nativeComponent.setSize(imageSize);
BufferedImage image = new BufferedImage(imageSize.width,
imageSize.height, BufferedImage.TYPE_INT_RGB);
nativeComponent.paintComponent(image);
nativeComponent.setSize(originalSize);
// 当网页超出目标大小时
if (imageSize.width > maxWidth
|| imageSize.height > maxHeight) {
//截图部分图形
image = image.getSubimage(0, 0, maxWidth, maxHeight);
/*此部分为使用缩略图
int width = image.getWidth(), height = image
.getHeight();
AffineTransform tx = new AffineTransform();
tx.scale((double) maxWidth / width, (double) maxHeight
/ height);
AffineTransformOp op = new AffineTransformOp(tx,
AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
//缩小
image = op.filter(image, null);*/
}
try {
// 输出图像
ImageIO.write(image, "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://blog.csdn.net/cping1982", 1024, 768),
BorderLayout.CENTER);
frame.setSize(800, 600);
// 仅初始化,但不显示
frame.invalidate();
frame.pack();
frame.setVisible(false);
}
});
NativeInterface.runEventPump();
}
}
java快照_网页快照 java 实现 | 学步园相关推荐
- java读写德卡数据_深圳德卡D3-U读写卡器windows(Java),linux(C)驱动开发 | 学步园
在D3的Java文件夹下有文件夹两个:classpackage.example,文件一个:readme.txt. classpackage中的 javaRD800.dll 是一个面向Java JNI ...
- java jtabbedpane 关闭_JTabbedPane实现关闭按钮 | 学步园
JTabbedPane如切换卡一般,大大的优化了布局,方便用户操作.Java默认的JTabbedPane添加tab时只会显示一个标题,咱们这里来给它实现关闭按钮,当鼠标移上这个tab时,便显示关闭按钮 ...
- java sortedset_Java类集-SortedSet接口 | 学步园
TreeSet实现了SortedSet接口 package iotest; import java.util.SortedSet; import java.util.TreeSet; public c ...
- java迭代器 异常_java迭代器失效 | 学步园
今天在测试代码的时候出现一个异常ConcurrentModificationException,该异常网上很多解决方案以及解释,但我还是再记录一遍吧. 代码抽象出来是这样的: import java. ...
- java精确度_java的数值精度问题 | 学步园
1.java的float和double是给科学计算用的,也就是说不能用于商业计算: 2.如果是商业计算那么必需使用java.math.BigDecimal,且必需要使用string来构造: (转载:h ...
- Java点名分类_java实现点名 | 学步园
java实现点名,在文本中每行存一个名字. import java.io.File; import java.io.FileInputStream; import java.util.ArrayLis ...
- java xsd校验,java中使用xsd验证xml | 学步园
1. 首先要导入包,axiom包请到apache上下载 2. xsd和xml 文件放在工程 bin路径下即可. package xmlValidate; import java.io.ByteArra ...
- java xsl解析xml_XSL解析xml | 学步园
1.解析步骤 (1)取得xml文件的内容xmlContent(通过IO流或者由webservice得到应答字符串) (2)根据xmlContent构造输入流xmlStream InputStream ...
- 易语言 java支持_开源Java客户端可以连接易语言服务器
我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...
最新文章
- 【面试系列】6种单例模式(Singleton)实现方法比较
- 为什么python打开pygame秒关闭后在运行_当我关闭Pygame时屏幕冻结
- HTML5 处理响应式图片
- ML2 配置 OVS VxLAN - 每天5分钟玩转 OpenStack(146)
- Oracle给表和字段添加注释
- linux中sed工具的简单解析与实例参考
- Shell数值及字符串比较
- Unity 引擎 14 年!开发者除了游戏还可以用它来做什么?
- 电商金额计算的 4 个坑,千万注意了!
- 微博表情插入mysql数据库,表情都是四字节字符
- python 抽签程序_抽签程序源码
- win10 1803官方原版镜像
- Python基础语句(一)
- Python 实现局域网视频聊天工具
- 计算机打字在哪点,电脑打字在哪里打开
- idea 提示 TKK 更新TKK失败,请检查网络连接,解决办法!
- SDN网络中控制器RYU的安装
- 工作进度跟踪表excel_在Excel中跟踪时间
- c代码-一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
- 世纪互联交付中心总监李少春:数据中心基础与服务探讨
热门文章
- MFC 窗口分割与通信
- spark—SQL实战案例
- 遥感影像道路提取:Improved Road Connectivity by Joint Learning of Orientation and Segmentation
- 大学计算机应用基础课本80页,《大学计算机应用基础》黄求根、卢强华 编_孔网...
- ClickHouse 四舍五入函数
- STM32 第5讲 MDK下载安装注册及配置
- 究竟啥才是互联网架构“高并发”
- LocalStorage在Chrome里的实现
- Apple - Quadrature
- 简单介绍下gbk和utf-8这两种编码的区别