# pdf-research
**Repository Path**: EverSpring007/pdf-research
## Basic Information
- **Project Name**: pdf-research
- **Description**: 通过JAVA实现pdf导出的几种实现
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 12
- **Forks**: 1
- **Created**: 2022-09-28
- **Last Updated**: 2025-05-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: pdf
## README
# 1.简介

上图为导出pdf的几种方式,有基于工具的,代码实现主要是JAVA。
* flying-saucer:对html,xhtml等做渲染,个人理解就是相当于浏览器对css/html的展示一样,导成pdf的功能是靠iText等实现的
* flying-saucer-pdf:基于iText 2.x的实现
* flying-saucer-pdf-openpdf:基于openpdf实现
* flying-saucer-pdf-iText5:基于iText5实现
* openpdf:基于iText的开源版本,可免费使用,目前一直有人维护。功能上比iText少,比如电子签名(个人认知,虽然提供了`PdfSignature`,`PdfSignatureAppearance`
等,但个人从源码的test中也没有感觉适用生成电子签名的方式,知道的朋友交流一下)
* iText:传说是adobe公司的,而pdf又以adobe pdf市场占用率最高,可想而知对pdf的支持是最好的。iText有3个大版本,iText 2.x可以免费使用,
iText 5.x部分商用,iText 7.x全商用,所以到用iText得摸着腰包来选择。iText 7说是性能比5有55%的提升,后期有时间测一把。
# 2.使用
分支:
* master:基于openpdf实现(可商用,所以定为主分支)
* iText-5:基于iText 5实现(尚未开始)
pdf生成组件,支持以下无参、有参方式生成pdf:
1. 无参:静态文件,比如静态html(css最高支持css 2.1,不支持css3)
2. 有参:pdf表单域,可通过Acrobat或者福昕等工具制作
3. 有参:模板引擎动态生成,thymeleaf和Freemarker
## 2.1 依赖
依赖版本
```
9.1.22
5.2.0
2.6.10
2.3.31
3.1.20
```
公共依赖
```xml
org.xhtmlrenderer
flying-saucer-pdf-openpdf
com.itextpdf
itext-asian
```
### 2.1.1 thymeleaf模板引擎依赖
```xml
org.springframework.boot
spring-boot-starter-thymeleaf
ognl
ognl
```
### 2.1.2 Freemarker模板引擎依赖
```xml
org.freemarker
freemarker
```
# 2.详细介绍
## 2.1 工具类
各工具类demo见*Test.java
**PdfTextUtils**: 把静态html、xhtml转成pdf
**PdfAcroUtils**: 把pdf表单域的模板转成pdf工具类
**PdfFreemarkerUtils**: 把freemarker模板赋值后转成pdf
**PdfThymeleafUtils**: 把thymeleaf模板赋值后转后pdf
## 3.2 使用方法
### 3.2.1 带模板引擎的模板路径
* 配置模板默认放在`resources/templates`目录下,需要自定义的可以通过*Utils的`setTemplateDirPath`变更存放目录
### 3.2.2 字体及中文
* 表单域用模板中定义好的字体
* 其他生成工具类中默认为resources下的`simsun.ttc`,在html中需要同时指定字体为`SimSun`,比如css通用指定
```css
body{font-family: 'SimSun'}
```
可通过`setFontPath`自定义字体路径
* 转换的方法是通过`export()`转换成`byte[]`数组,如果需要生成文件,可自行转换