哈哈,有没有发现小六六总是写些用的很少的东西,没办法,这种东西都是用到的时候,百度踩坑,然后怼出来的,如果不写点文章记录下来,那下次又得重新怼一遍前面的过程,所以小六六偷点懒,记录一下,下次就简单了,说说场景吧,小六六目前负责的系统有一个题库的需求,就是要求把学生做错的题目生成一个pdf,或者是历年的真题生成一个pdf,然后给到用户下载,去用笔写,我本来想,这种需求不应该是运营教务那边直接上传就好了,但是他们不干,非得让我们代码生成,然后产品小姐姐又被他们说动了,然后最后只好接了,不过我绝对不是屈服在小姐姐的美色之下,我只是单纯的觉得这个需求又意思。哈哈
itext介绍
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
Itext官网
其实这边我说下又2种方式生成pdf
可以用原生的api,去创建pdf 所需要的每一个元素,这种也是一种实现方式,但是怎么说呢?就是你必须学他的api,有点多,哈哈
可以直接用itextpdf 这个jar,这样就可以把html直接变成pdf,那我们只需要用一个模板引擎,然后把他渲染,然后拿到这个页面,就可以生成我们需要的pdf了,下面的文章也是用的第二种方式,然后我把大致的过程记录一下
引入依赖
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
<groupId>com.github.superad.pdf.kit</groupId>
<artifactId>pdf-kit</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<version>1.1-RELEASE</version>
<properties>
<java.src.version>1.7</java.src.version>
<java.target.version>1.7</java.target.version>
<project.encoding>UTF-8</project.encoding>
</properties>
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
<dependencies>
<!--pdf生成工具类-->
<!--pdf生成 itext-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.0.3</version>
</dependency>
<!--freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.26-incubating</version>
</dependency>
<!--jfreechart-->
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.2</version>
</dependency>
<!--log-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.21</version>
</dependency>
<!--util-->
<dependency>
<groupId>com.google.guava</groupId>