JAVA 网页转图片

最近遇到一个需求,需要将网页转成图片,一番折腾之后,发现了2中方法:

  • html2image
  • cssbox

1)html2image

示例代码如下:

HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
String htmlstr = "<p>页面内容</p>";
imageGenerator.loadHtml(htmlstr);
imageGenerator.getBufferedImage();
imageGenerator.saveAsImage("d:/hello-world.png");
imageGenerator.saveAsHtmlWithMap("hello-world.html", "hello-world.png");

maven:

<dependency>
    <groupId>com.github.xuwei-k</groupId>
    <artifactId>html2image</artifactId>
    <version>0.1.0</version>
</dependency>

大致看了下它的源码,只有5个类, 很简单,缺点是对css的支持非常不好。故放弃了使用。

2)cssbox

官网:http://cssbox.sourceforge.net/
示例代码如下:

ImageRenderer render = new ImageRenderer();
FileOutputStream out = new FileOutputStream(new File("D:/html.png"));
render.renderURL(url, out, ImageRenderer.Type.PNG);

maven:

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

调用非常简单,能支持较多的css。当我在本地测试通过正得意时, 部署上线上linux系统,又发现一个坑爹的问题,导出的图片,文字变成乱码了。。
解决方案:
- 在网上下载中文字体,我这下载的是微软雅黑msyh.rar
- 将msyh.rar放入 /usr/share/fonts/zh_CN, zh_CN 文件夹需要自己创建。
- cd %JAVA_HOME%/jre/lib/fonts
- mkdir fallback
- 将msyh.ttf字体复制到fallback中

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Java将HTML换为图片可以使用一些工具或插件。其中,你提到的三个引用中有两个工具可以实现这个功能。 首先,你可以使用html2image工具将HTML换为图片。这个工具可以在Linux/Unix平台上运行,并支持将网页换为BMP、PNG和JPG等格式的图片。你可以在浏览器中打开HTML页面,并调用相应的JavaScript函数来生成图片。 另外,你还可以使用freemarker模板引擎生成文本输出。freemarker是一个基于模板生成文本输出的通用工具,使用Java编写。虽然它主要用于生成HTML Web页面,但也可以用于生成其他类型的文本输出。通过编写适当的模板文件,你可以将HTML换为图片。 以下是一个使用html2image和freemarker的Java示例: ```java import org.htmlrenderer.swing.ImageRenderer; import java.io.File; import java.io.FileOutputStream; public class HtmlToImageConverter { public static void main(String[] args) { try { ImageRenderer renderer = new ImageRenderer(); String url = "https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html"; /* 网络链接的HTML */ FileOutputStream out = new FileOutputStream(new File("D:\\html.png")); /* 生成文件的路径 */ // 使用html2image工具 renderer.renderURL(url, out, ImageRenderer.Type.PNG); /* 将URL网页写入生成文件中 */ // 使用freemarker模板引擎 // 生成HTML文本并写入文件中 // 使用renderer.renderURL方法将HTML文件换为图片 System.out.println("换完成"); } catch (Exception e) { e.printStackTrace(); } } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值