flyingsaucer进行html文件转图片和pdf

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

目录

一、前言

二、html转图片

1、添加依赖

2、代码示例

(1)测试html文件

(2)代码示例

3、演示结果

三、html转pdf

1、添加依赖

2、代码示例

3、演示结果

四、注意点

1、html转图片的源url

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

五、Linux上安装字体

1、拷贝字体

2、赋予权限

3、建立字体缓存

4、查看安装的字体

一、前言


20210508170027873.png

二、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,可以看到渲染的图片是没有背景颜色的。如下:

2021050817272179.png

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

三、html转pdf


1、添加依赖

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

2021050817301426.png

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: SimSun
      String 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);
    }
  }
}


20210508173840460.png

3、演示结果20210508181108917.png

四、注意点



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、查看安装的字体

20210508180814952.png

相关文章
|
3月前
|
前端开发 JavaScript
个人征信电子版无痕修改, 个人信用报告pdf修改,js+html+css即可实现【仅供学习用途】
本代码展示了一个信用知识学习系统的前端实现,包含评分计算、因素分析和建议生成功能。所有数据均为模拟生成
|
2月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
361 40
|
5月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
2月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
4月前
|
人工智能 搜索推荐 算法
PDF 转 JPG 图片小工具:CodeBuddy 助力解决转换痛点
在 PDF 转 JPG 的实际应用中,用户普遍面临转换质量差、批量处理效率低、格式兼容性不足以及编程实现困难等痛点。而 CodeBuddy 凭借智能代码生成与优化、实时错误诊断修复、助力代码学习拓展,以及支持多场景适配与个性化定制等强大的 AI 编程能力,精准直击这些难题。使用 CodeBuddy 开发 Python PDF 转 JPG 小工具,能够有效提升转换效率与质量,降低开发门槛和成本,为用户带来高效、优质的文件格式转换体验。
152 16
|
4月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
149 10
|
3月前
|
数据采集 存储 API
Python爬虫结合API接口批量获取PDF文件
Python爬虫结合API接口批量获取PDF文件
|
3月前
|
前端开发
个人征信PDF无痕修改软件,个人征信模板可编辑,个人征信报告p图神器【js+html+css仅供学习用途】
这是一款信用知识学习系统,旨在帮助用户了解征信基本概念、信用评分计算原理及信用行为影响。系统通过模拟数据生成信用报告,涵盖还款记录
|
3月前
|
前端开发 JavaScript 容器
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
|
5月前
|
文字识别 BI
【工具教程】批量PDF和图片OCR识别指定区域文字自动改图片名字,多个区域一次性批量识别改名批量重命名
本内容介绍了一款用于企业档案、医院病历及办公文件管理的图片和PDF文字识别工具。通过框选识别区域,软件可批量提取关键信息,实现文件重命名或导出为表格,极大提升管理效率。支持图片与PDF两种模式,操作简单,适用于合同、病历、报告等场景。提供详细步骤指导,包含区域设置、文件导入、批量处理及结果校验等功能。
780 8