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

相关文章
|
6月前
|
前端开发 JavaScript
个人征信电子版无痕修改, 个人信用报告pdf修改,js+html+css即可实现【仅供学习用途】
本代码展示了一个信用知识学习系统的前端实现,包含评分计算、因素分析和建议生成功能。所有数据均为模拟生成
|
3月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
957 0
|
7月前
|
人工智能 搜索推荐 算法
PDF 转 JPG 图片小工具:CodeBuddy 助力解决转换痛点
在 PDF 转 JPG 的实际应用中,用户普遍面临转换质量差、批量处理效率低、格式兼容性不足以及编程实现困难等痛点。而 CodeBuddy 凭借智能代码生成与优化、实时错误诊断修复、助力代码学习拓展,以及支持多场景适配与个性化定制等强大的 AI 编程能力,精准直击这些难题。使用 CodeBuddy 开发 Python PDF 转 JPG 小工具,能够有效提升转换效率与质量,降低开发门槛和成本,为用户带来高效、优质的文件格式转换体验。
274 16
|
6月前
|
人工智能 开发工具 开发者
【HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能
HarmonyOS 系统提供的核心场景化视觉服务,旨在帮助开发者快速实现移动端文档数字化功能。
336 0
|
6月前
|
前端开发
个人征信PDF无痕修改软件,个人征信模板可编辑,个人征信报告p图神器【js+html+css仅供学习用途】
这是一款信用知识学习系统,旨在帮助用户了解征信基本概念、信用评分计算原理及信用行为影响。系统通过模拟数据生成信用报告,涵盖还款记录
|
6月前
|
前端开发 JavaScript 容器
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
|
9月前
|
人工智能 文字识别 自然语言处理
1.6K star!这个开源文本提取神器,5分钟搞定PDF/图片/Office文档!
Kreuzberg 是一个基于 Python 的文本提取库,支持从 PDF、图像、Office 文档等 20+ 格式中提取文本内容。采用 MIT 开源协议,具备本地处理、异步架构、智能 OCR 等特性,特别适合需要隐私保护的文档处理场景。
1117 1
|
11月前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
1137 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
11月前
|
移动开发 JavaScript 前端开发
【Html.js——图片折叠效果】折叠手风琴(蓝桥杯真题-1763)【合集】
本项目实现了一个图片折叠手风琴效果,使用jQuery完成。主要包括以下部分: - **介绍**:任务是通过点击图片实现折叠和展开的效果。 - **准备**:内置初始代码,包含 `css/style.css`、`images/` 文件夹、`js/` 文件夹及 `index.html` 等文件。启动 Web Server 服务可运行项目。 - **目标**:完善 `index.js` 文件,使页面达到预期的折叠效果。 - **规定**:严格按步骤操作,保持默认文件结构不变,并在完成后保持 Web 服务正常访问状态。 - **通关代码**:使用 jQuery 实现点击事件,为选中元素添加 `act
295 19
|
9月前
|
文字识别 UED Python
对双栏 | 单双栏混合 | 图表文字混合的复杂布局的图片OCR识别(对布局复杂的整个pdf进行OCR识别)
这个故事告诉我们要多尝试不同的库和引擎,尤其是需求比较偏门或者少见的时候。同一个方向不同的库所擅长的领域是不一样的。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章