项目需求
使用velocity模板生成html内容,将含有标题 / 段落 / 表格 / 图片 的html文件转化成PDF和word格式,并保留良好样式。
iText
起初只想实现word功能,但经过尝试和查询一些例如poi等工具,都无法较好的保留原有的复杂样式,后更换pdf需求进行尝试,itext生成pdf已经非常完美了。
生成word样式没有尝试,感觉比较麻烦。
后来采用spire的free包将pdf转word样式保持很好,但是项目环境中遇到问题,转战html转word。
注意:不要将spire的pdf和word包同时引用,如果需要可以直接使用office包,会产生一些例如注册许可方面的冲突。
spire.pdf / spire.doc / spire.office
很好的第三方工具,能完美实现html转pdf和word等格式文件,最关键的是有free版本,虽然有10页的限制,结合需求页可能够用和付费版功能上无差别。
付费版本也一样可以用,只是会在左上角有红色警告信息,其实word可以手动删除,pdf可以通过添加图片的方式遮盖掉。
注意:我们的项目环境是Linux / jdk1.7 / weblogic12.1.3.0.0(pdf转word–使用doc包就会报错UnkownSource【原因不明】,最好直接html转word最终解决问题),html转word表头的css样式可能会无法解析,使用基本样式就好。
spire.pdf / spire.doc 冰蓝科技 中文文档
html转pdf
引入jar包
引入itext仓库
<repository>
<id>itext</id>
<name>iText Repository - releases</name>
<url>https://repo.itextsupport.com/releases</url>
</repository>
在pom.xml引入maven(不包括spire.pdf)
<!-- itextpdf -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext-rtf</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<!-- pdfHTML -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.0</version>
<type>pom</type>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.0.8</version>
</dependency>
</dependencies>
可以下载spire.pdf.free以及各种实用jar包的maven仓库
maven仓库(内含spire.pdf.free和spire.doc.free)
生成pdf
package com.sy.util;
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.attach.impl.DefaultTagWorkerFactory;
import com.itextpdf.html2pdf.css.media.MediaDeviceDescription;
import com.itextpdf.html2pdf.css.media.MediaType;
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.layout.font.FontProvider;
impor