目录

  • 一、前言
  • 二、html转图片
    • 1、添加依赖
    • 2、代码示例
      • (1)测试html文件
      • (2)代码示例
    • 3、演示结果
  • 三、html转pdf
    • 1、添加依赖
    • 2、代码示例
    • 3、演示结果
  • 四、注意点
    • 1、html转图片的源url
    • 2、部署到linux上后中文乱码
  • 五、Linux上安装字体
    • 1、拷贝字体
    • 2、赋予权限
    • 3、建立字体缓存
    • 4、查看安装的字体

一、前言

之前听到公司同事在讨论用jdk原生api生成图片,但是awt原生api操作比较麻烦,样式也不好控制,因此想到了根据html文件转,搜罗了一番,发现了flyingsaucer。介绍如下:

二、html转图片

1、添加依赖

      <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-core</artifactId><version>9.1.22</version></dependency>

2、代码示例

(1)测试html文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"/><title>Title</title><style>body {font-family: SimSun;background: aliceblue;margin: 0px;padding: 0px;}div{margin: 20px 0px;}</style>
</head>
<body><div><a href="https://test-img.yudhabhakti.co.id/bnc-public-bucket/bnc/file/xC3ABZ5mJv28iP_1KaB8Abb6BDOArvPeX-ijVpbjlms.pdf" download="fileName">点击下载</a></div><div style="color:burlywood">首页内容</div><div><table border="1px" cellspacing="0px"><tr><th>姓名</th><th>电话</th></tr><tr><td>刘亚楼</td><td>13347293021</td></tr></table></div><script></script>
</body>
</html>

注意:这里我们设置了字体为宋体。

(2)代码示例

import org.xhtmlrenderer.simple.Graphics2DRenderer;
import org.xhtmlrenderer.swing.Java2DRenderer;
import org.xhtmlrenderer.util.FSImageWriter;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class ImageRender {public static void main(String[] args) throws IOException {String basePath = System.getProperty("user.home") + File.separator + "flyingsaucer";File source = new File(basePath, "test.html");File orginalDest = new File(basePath, "original.png");File g2drDest = new File(basePath, "G2DR.png");// 有些css样式不支持,如背景颜色Java2DRenderer renderer = new Java2DRenderer(source, 1024);renderer.setBufferedImageType(BufferedImage.TYPE_INT_RGB);BufferedImage java2dImage = renderer.getImage();new FSImageWriter().write(java2dImage, orginalDest.toString());// 支持css样式,如背景颜色BufferedImage g2drImage = Graphics2DRenderer.renderToImageAutoSize(source.toURI().toURL().toExternalForm(), 1024, BufferedImage.TYPE_INT_ARGB);ImageIO.write(g2drImage, "png", g2drDest);}
}

3、演示结果

  • 使用Java2DRenderer渲染的original.png,可以看到渲染的图片是没有背景颜色的。如下:

  • 使用Graphics2DRenderer渲染的G2DR.png,是有背景颜色的,如下:

三、html转pdf

1、添加依赖

      <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.22</version></dependency>

备注:官方有标注说iText 2.x版本有尚未解决的安全bug,所以我们这里引入flying-saucer-pdf-itext5。

2、代码示例

import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.file.Paths;public class PDFRender {public static void main(String[] args) throws Exception {String basePath = System.getProperty("user.home") + File.separator + "flyingsaucer";String source = Paths.get(basePath, "test.html").toString();File dest = Paths.get(basePath, "saucer.pdf").toFile();try (OutputStream os = new FileOutputStream(dest)) {ITextRenderer renderer = new ITextRenderer();ITextFontResolver fontResolver = renderer.getFontResolver();// 必须添加能支持中文的字体,否则html内容有中文会不显示,同时body标签要设置font-family: SimSunString fontPath = PDFRender.class.getResource("/font/simsun.ttc").getPath();fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);renderer.setDocument(new File(source));renderer.layout();renderer.createPDF(os);}}
}

备注:
1、html文件内容和转图片的一致。
2、html转pdf时,如果html文件内容有中文,则必须设置能支持中文的字体,否则转pdf后中文不会显示。这里我们用的是宋体,字体simsun.ttc文件可以直接在C:\Windows\Fonts目录下找到,复制即可,如下:

3、演示结果

四、注意点

1、html转图片的源url

html转图片时,Graphics2DRenderer#renderToImageAutoSize方法的第一个参数为url,即java.net.URL实例的字符串形式,如:file:/C:/Users/liuyl1/flyingsaucer/test.html

2、部署到linux上后中文乱码

无论是html转图片还是html转pdf,如果服务器上没有支持中文的字体,就会出现中文乱码或者不显示问题,下面会介绍如何在Linux上安装字体。

五、Linux上安装字体

1、拷贝字体

上面我们说过在C:\Windows\Fonts目录下能找到simsun.ttc(宋体),创建目录将字体复制到下面目录:
mkdir -pv /usr/share/fonts/chinese/TrueType

2、赋予权限

chmod 755 /usr/share/fonts/chinese/TrueType

3、建立字体缓存

mkfontscale(如果没有该命令需要安装一下:yum install mkfontscale)
fc-cache -fv(如果没有该命令需要安装一下:yum install fontconfig)

4、查看安装的字体

fc-list查看当前安装的字体,如下:

flyingsaucer进行html文件转图片和pdf相关推荐

  1. Python工具脚本,PDF文件批量转图片(pdf图片提取器)工具(exe)

    前面写(抄袭)了一下转图片(提取图片)的源码,包括PDF文件以及PPT文件,这里本渣渣抽空进行了exe打包,打包的是pdf文件转图片,当然使用的gui还是python的tkinter库,仅供参考和学习 ...

  2. 项目实例改编:利用structs2的action 实时显示图片、pdf和其他内容的框架抽取。(转)...

    转自:http://www.verydemo.com/demo_c167_i1382.html 针对:预览文件(图片,PDF)文件来源为action中的inputStream 重点: structs2 ...

  3. 【电脑办公软件】万彩办公大师教程丨图片转PDF工具

    万彩办公大师的图片转PDF工具是一款操作简单, 效果显著的应用程序. 支持将图片,扫描文件,传真等转换为PDF文件. 图片转PDF工具功能如下: 1.  支持多种图片格式,包括但不限于:TIFF, J ...

  4. OFD文件怎么转化为PDF文件?教你三种一键转换OFD的方法

    OFD文件是一种电子公文交换和存储的一种格式标准,它是一种开放固定版式的文档.这种格式的文档具有永久可读,版面固定,安全且不易被篡改以及占用体积小的优点.可以说OFD是中国版的PDF,它现在已经逐渐被 ...

  5. xsd文件转图片_图片转换成PDF格式怎么转?图片转换成PDF的软件哪个好?

    图片转换成PDF格式怎么转?经验丰富的设计师在完成图片格式的设计作品后都会将图片转成PDF格式文件,这样方便保存以及参加一些设计比赛.同时我们在保存大量图片的时候也可以将图片转换成PDF文件.但是还有 ...

  6. Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹

    Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹 目录 实现步骤和结果 核心代码 实现步骤和结果 ...

  7. pdf转图片 java_有将pdf文件转图片的格式方法吗?

    有时候我们为了方便传输,需要把图片转为PDF的格式,因为它所占的空间相对要小.但是因为pdf文件的安全性很好所以不能进行编辑,那我们又要进行编辑图片的时候,就又会把PDF文件格式转换成图片来进行编辑. ...

  8. xsd文件转图片_如何将图片转化为PDF格式?分享一个超简单的方法给你

    如何将图片转化为PDF格式?有些朋友经常需要将图片转换成PDF格式文件,这样比较方便保存和传输.熟悉文件转换的朋友是知道该怎么操作的,不了解的朋友不用担心,今天我来教大家一个方法,能够帮助我们简单快速 ...

  9. 导出文件_一招解决PDF文件导出图片

    将PDF文件保存为高清图片是经常需要进行的保存方式之一,因为PDF文件虽然安全性高,但是相比较图片而言,还是不易进行查看的,那么如何将PDF文件导出图片呢?以前也了解过很多方法,不过最好的当然不是截图 ...

最新文章

  1. MQTT基础——Part 1. 认识MQTT
  2. [Java基础] 深入jar包:从jar包中读取资源文件
  3. h264.265裸流和音频(ALAW或PCM)封装为mp4
  4. 集成学习python_从Boosting到Stacking,概览集成学习的方法与性能
  5. Part 2: Containers
  6. 只需6步,教你从零开发一个签到小程序
  7. My in 2007
  8. 微信多开(两种方法)
  9. java基本语法实验体会_实验一 Java 开发环境及基本语法
  10. 单片机零基础入门(8-5)模块化编程
  11. 使用openwrt-SDK 生成IPK
  12. 电脑版微信多开的三种方法
  13. JAVA图形化界面设计
  14. HTML、CSS、JavaScript学习总结
  15. allegro设置差分线
  16. 股神涨跌求剩余股票价格
  17. 南安一中八十年校庆征文 陈建春老师
  18. 聚划算导航栏的反弹效果代码 纯原生js实现
  19. 天猫实时销量接口用于商品数据分析,超详细的接口介绍
  20. 最新心形拼图小程序源码+带流量主

热门文章

  1. Flutter 全能型选手GetX —— 路由管理
  2. 《Adobe Premiere Pro CS5经典教程》——1.7 定制工作区
  3. php 色彩空间转换,PHP Imagemagick将灰度转换为RGB
  4. java主色调_主色调
  5. k8s 服务注册与发现(二)Kubernetes内部域名解析原理
  6. 【有利可图网】PS教程:制造低多边形熊猫头像
  7. Java8时间类Instant及ZoneId,ZoneOffset用法
  8. conda SSL错误
  9. 欧盟要求谷歌美国站点也要执行“被遗忘权”
  10. VSLAM学习记录-求导:李群与李代数