CssBox通过HTML生成图片

通过CssBox将HTML页面生成图片

前面有使用过Robot技术生成页面的快照,但是这个是一种应急的方法,只能抓取屏幕显示的内容,对于当前未显示的

页面内容则是抓取不到了,文章链接
以此今天介绍一种可以依据URL获取到整个页面的进行一个长截图的纯Java的方法。

CSSBox,不是CSS Box层叠样式【盒子模型】,而是一个采用纯Java开发的(X)HTML/CSS渲染引擎,是一个网络客户端组件。它能够提供关于已渲染页面内容和布局的完整详细信息。CSSBox还能够展示渲染过的文档。可以实现将HTML生成图片。

具体操作:
1、导入需要的依赖:
maven仓库管理的方式:

<dependency>
    <groupId>net.sf.cssbox</groupId>
    <artifactId>cssbox</artifactId>
    <version>4.14</version>
</dependency>

依赖的jar包:
在这里插入图片描述
2、集成的Java代码:

import java.awt.Dimension;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
 
import org.fit.cssbox.demo.ImageRenderer;
import org.xml.sax.SAXException;
 
public class CSSBoxToHtmlImge {
	public static void main(String[] args) throws IOException, SAXException {
        ImageRenderer render = new ImageRenderer();
        String url = "目标URL";
        //存放的路径,File.separator:表示文件分割符
        FileOutputStream out = new FileOutputStream(new File("G:"+ File.separator+"cssbox.png"));
        render.setWindowSize(new Dimension(1900, 1000), false);
        render.renderURL(url, out, ImageRenderer.Type.PNG);
        out.close();
        System.out.println("OK");
    }
}

注意事项:

1、通过查看源码发现其生成图片只能是“.png”和“.svg”格式;

2、不支持引用的外部js、css;其次,自定义设置的宽度有时候不起作用,代码内部有一个默认的宽度是2400,暂时没找到解决方法

3、中文乱码问题:集成到系统部署到Linux环境后会存在中文字符编译异常,都显示成“□”;

解决方法是修改源码数据:找到文件“VisualContext.java” 所属:package org.fit.cssbox.layout,
其构造函数中对font进行了初始化化:

在这里插入图片描述

将该段修改为:font = new Font(“宋体”, Font.PLAIN, (int) CSSUnits.medium_font); 即可
如果是想找到Font.SERIF的话,位置在jdk下的Java/beans/Font,定义的是一个常量。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值