public class ShotsPic 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 ShotsPic( String url) {

super(new BorderLayout());

JPanel webBrowserPanel = new JPanel(new BorderLayout());

final String fileName = "screenShots.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) {

//动态执行JS 最终返回网页的实际的宽度和高度

String result = (String) webBrowser.executeJavascriptWithResult(jsDimension.toString());

System.out.println(result);

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);

imageSize.height = Math.max(originalSize.height,imageSize.height);

System.out.println(imageSize.width);

System.out.println(imageSize.height);

nativeComponent.setSize(imageSize);

BufferedImage image = new BufferedImage(imageSize.width,imageSize.height, BufferedImage.TYPE_INT_RGB);

nativeComponent.paintComponent(image);

//nativeComponent.setSize(imageSize);

// 当网页超出目标大小时

/*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("E:\\"+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() {

JFrame frame = new JFrame("以DJ组件保存指定网页截图");

frame.getContentPane().add(

new ShotsPic("www.qq.com"),

BorderLayout.CENTER);

frame.setSize(1280, 768);

// 仅初始化,但不显示

frame.invalidate();

frame.pack();

frame.setVisible(false);

}

});

NativeInterface.runEventPump();

}

}

程序需要三个包:

java url 缩略图_java根据url生成网页截图,缩略图 | 学步园相关推荐

  1. java dll 乱码_java调用c++ dll出现中文乱码 | 学步园

    最近的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作.在调用中如果路径中包含有中文字符就会出现问题,程序运行就会中止.下面用一个小例子,来说明记录下 ...

  2. java biginteger使用_java中的BigInteger的基本用法 | 学步园

    注 : 为了更好的理解BigInteger类,特提供了一篇关于BigInteger的题目及本人的解答,感兴趣的朋友可以到我的博客看一下 import java.math.BigInteger; pub ...

  3. java 栈 泛型_java 泛型栈(数组实现) | 学步园

    尝试将一些数据结构用java实现,尝试过程中确实碰到一些问题,收获很大import java.lang.reflect.Array; class ArrayStack { Class type; pr ...

  4. java ip 国家_java通过ip获取用户所在国家 | 学步园

    什么是GeoIP ? 所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息的一个数据库.GeoIP有两个版本,一个免费版,一个收费版本.收费版本的准确率和数据更 ...

  5. java web定时器_java的web项目中使用定时器 | 学步园

    之前接触过程序中的定时任务,但是没去自己亲自尝试过.终于这次抽空搞了一下.(一定要自己去操作,才能长经验,光看到过是没用的) 以下是两种方法,我使用的是监听的方法. JAVA WEB定时器,定时器的启 ...

  6. java url 协议_Java自定义URL协议

    Java提供了对URL协议进行扩展的能力,通过扩展用户可以自定义URL通信协议,JDK默认提供了对HTTP,FTP,JAR,FILE等的实现,而当需要自己定义通信协议的时候,就需要利用JDK提供的对U ...

  7. java.net.url 兼容_java.net.Url类的应用(网络编程)

    一.认识URL 类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是更为复杂的对象的引用,例如对数据库或搜索引擎的查询. 简单的可 ...

  8. java 图形校验_java图形验证码生成工具类 web页面校验验证码

    java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...

  9. java 优酷视频缩略图_java获取优酷等视频缩略图

    类型:Android平台大小:6.8M语言:中文 评分:7.2 标签: 立即下载 想获取优酷等视频缩略图,在网上没有找到满意的资料,参考了huangdijia的PHP版工具一些思路,写了下面的JAVA ...

最新文章

  1. 内存都是由半导体器件构成的_开启5G新时代——XPS成像技术在半导体器件中的应用...
  2. 简谈造成循环引用的原因以及处理办法
  3. 编程问题难解决,学会提问是关键!
  4. Linux内核 crypto文件夹 密码学知识学习
  5. Spring之WebSocket网页聊天以及服务器推送
  6. python多因子量化选股模型_量化新兵第十步:多因子选股模型
  7. layUI日期框回调函数
  8. Unreal Engine 开篇
  9. 拓端tecdat|用RSHINY DASHBOARD可视化美国投票记录
  10. 9)Thymeleaf ⼯具类对象表达式
  11. 单片机c语言信号灯定时编程,单片机定时器控制交通灯程序1
  12. 计算机机械制图试题及答案,机械制图习题集-附带答案
  13. 微信开放平台----微信扫码登录
  14. Thinkphp6 think-queue redis 执行异步任务
  15. 如何修改手游版本服务器,原神怎么只下一次客户端 b服官服渠道服手机自由切换方法...
  16. 哥德巴赫猜想:任意大于6的偶数都可以被分解成两个素数之和
  17. spss分析方法-多个独立样本检验(转载)
  18. Java 优惠券最优使用实现
  19. 使用git工具提交上传代码到GitHub上或者远程仓库
  20. h5的开源播放器组件

热门文章

  1. 力学,软体和刚体碰撞响应 以及 层次KDOP_OBB包围盒技术
  2. Linux基本常用命令
  3. 在centos中安装samba 服务
  4. [我的理解]Javascript的原型与原型链
  5. 基于jQ+CSS3页面滚动内容元素动画特效
  6. pycharm创建python虚拟环境好处_PyCharm虚拟环境创建Django2项目一些问题的解决方案...
  7. node path html模块,深入理解node.js之path模块
  8. linux 渲染程序图层管理,Linux驱动多图层开发--lcdc/framebuffer的注册(RK平台)
  9. java中读取logback日志文件_java 中使用logback日志,并实现日志按天分类压缩保存。...
  10. 清掉数据_值得收藏!面试中有哪些经典的数据库问题?