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

相关文章
|
14天前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
45 16
|
26天前
|
编解码 人工智能 文字识别
用PDF转换图片的方式弥补通义千问在扫描版PDF支持方面的缺失
当前通义千问Web版和本地版qwen-VL在处理扫描版PDF时均无法直接识别,导致实际应用中处理大量扫描PDF的需求难以满足。为此,通过使用Python的pdf2image库,可将PDF文件转换为图片,再进行OCR处理,实现解决方案。文中提供了具体的代码示例,展示了如何将PDF文件的每一页转换成图片,并保存至指定文件夹,为后续的OCR处理做好准备。
|
1月前
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
39 1
利用html2canvas插件自定义生成名片信息并保存图片
|
2月前
|
Web App开发 前端开发 搜索推荐
创建HTML文件
【10月更文挑战第14天】创建HTML文件
64 4
|
2月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
659 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
2月前
HTML图片
【10月更文挑战第4天】HTML图片。
38 2
|
2月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
146 2
|
2月前
|
JavaScript 前端开发 容器
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
246 0
|
10天前
|
人工智能 文字识别 数据挖掘
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
MarkItDown 是微软开源的多功能文档转换工具,支持将 PDF、PPT、Word、Excel、图像、音频等多种格式的文件转换为 Markdown 格式,具备 OCR 文字识别、语音转文字和元数据提取等功能。
78 9
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
|
2月前
|
Java Apache Maven
将word文档转换成pdf文件方法
在Java中,将Word文档转换为PDF文件可采用多种方法:1) 使用Apache POI和iText库,适合处理基本转换需求;2) Aspose.Words for Java,提供更高级的功能和性能;3) 利用LibreOffice命令行工具,适用于需要开源解决方案的场景。每种方法都有其适用范围,可根据具体需求选择。

热门文章

最新文章