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 实现 | 学步园相关推荐

  1. java读写德卡数据_深圳德卡D3-U读写卡器windows(Java),linux(C)驱动开发 | 学步园

    在D3的Java文件夹下有文件夹两个:classpackage.example,文件一个:readme.txt. classpackage中的 javaRD800.dll 是一个面向Java JNI ...

  2. java jtabbedpane 关闭_JTabbedPane实现关闭按钮 | 学步园

    JTabbedPane如切换卡一般,大大的优化了布局,方便用户操作.Java默认的JTabbedPane添加tab时只会显示一个标题,咱们这里来给它实现关闭按钮,当鼠标移上这个tab时,便显示关闭按钮 ...

  3. java sortedset_Java类集-SortedSet接口 | 学步园

    TreeSet实现了SortedSet接口 package iotest; import java.util.SortedSet; import java.util.TreeSet; public c ...

  4. java迭代器 异常_java迭代器失效 | 学步园

    今天在测试代码的时候出现一个异常ConcurrentModificationException,该异常网上很多解决方案以及解释,但我还是再记录一遍吧. 代码抽象出来是这样的: import java. ...

  5. java精确度_java的数值精度问题 | 学步园

    1.java的float和double是给科学计算用的,也就是说不能用于商业计算: 2.如果是商业计算那么必需使用java.math.BigDecimal,且必需要使用string来构造: (转载:h ...

  6. Java点名分类_java实现点名 | 学步园

    java实现点名,在文本中每行存一个名字. import java.io.File; import java.io.FileInputStream; import java.util.ArrayLis ...

  7. java xsd校验,java中使用xsd验证xml | 学步园

    1. 首先要导入包,axiom包请到apache上下载 2. xsd和xml 文件放在工程 bin路径下即可. package xmlValidate; import java.io.ByteArra ...

  8. java xsl解析xml_XSL解析xml | 学步园

    1.解析步骤 (1)取得xml文件的内容xmlContent(通过IO流或者由webservice得到应答字符串) (2)根据xmlContent构造输入流xmlStream InputStream ...

  9. 易语言 java支持_开源Java客户端可以连接易语言服务器

    我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...

最新文章

  1. 【面试系列】6种单例模式(Singleton)实现方法比较
  2. 为什么python打开pygame秒关闭后在运行_当我关闭Pygame时屏幕冻结
  3. HTML5 处理响应式图片
  4. ML2 配置 OVS VxLAN - 每天5分钟玩转 OpenStack(146)
  5. Oracle给表和字段添加注释
  6. linux中sed工具的简单解析与实例参考
  7. Shell数值及字符串比较
  8. Unity 引擎 14 年!开发者除了游戏还可以用它来做什么?
  9. 电商金额计算的 4 个坑,千万注意了!
  10. 微博表情插入mysql数据库,表情都是四字节字符
  11. python 抽签程序_抽签程序源码
  12. win10 1803官方原版镜像
  13. Python基础语句(一)
  14. Python 实现局域网视频聊天工具
  15. 计算机打字在哪点,电脑打字在哪里打开
  16. idea 提示 TKK 更新TKK失败,请检查网络连接,解决办法!
  17. SDN网络中控制器RYU的安装
  18. 工作进度跟踪表excel_在Excel中跟踪时间
  19. c代码-一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  20. 世纪互联交付中心总监李少春:数据中心基础与服务探讨

热门文章

  1. MFC 窗口分割与通信
  2. spark—SQL实战案例
  3. 遥感影像道路提取:Improved Road Connectivity by Joint Learning of Orientation and Segmentation
  4. 大学计算机应用基础课本80页,《大学计算机应用基础》黄求根、卢强华 编_孔网...
  5. ClickHouse 四舍五入函数
  6. STM32 第5讲 MDK下载安装注册及配置
  7. 究竟啥才是互联网架构“高并发”
  8. LocalStorage在Chrome里的实现
  9. Apple - Quadrature
  10. 简单介绍下gbk和utf-8这两种编码的区别