首先需要在maven中做配置
< ! -- spring 配置 -- >
< dependency>
< groupId> spring- wl< / groupId>
< artifactId> spring< / artifactId>
< version> 3.0 < / version>
< / dependency>
< dependency>
< groupId> com. itextpdf. tool< / groupId>
< artifactId> xmlworker< / artifactId>
< version> 5.5 .6 < / version>
< / dependency>
< dependency>
< groupId> com. itextpdf< / groupId>
< artifactId> itext- asian< / artifactId>
< version> 5.2 .0 < / version>
< / dependency>
< dependency>
< groupId> freemarker< / groupId>
< artifactId> freemarker< / artifactId>
< version> 2.3 .8 < / version>
< / dependency>
然后创建一个PDFUtils类
package workbench. utils;
import java. io. ByteArrayInputStream;
import java. io. ByteArrayOutputStream;
import java. io. File;
import java. io. FileInputStream;
import java. io. FileOutputStream;
import java. io. IOException;
import java. io. InputStreamReader;
import java. util. HashMap;
import java. util. Map;
import java. util. zip. ZipEntry;
import java. util. zip. ZipOutputStream;
import org. springframework. ui. freemarker. FreeMarkerTemplateUtils;
import com. itextpdf. text. BaseColor;
import com. itextpdf. text. Document;
import com. itextpdf. text. DocumentException;
import com. itextpdf. text. Font;
import com. itextpdf. text. pdf. BaseFont;
import com. itextpdf. text. pdf. PdfWriter;
import com. itextpdf. tool. xml. Pipeline;
import com. itextpdf. tool. xml. XMLWorker;
import com. itextpdf. tool. xml. XMLWorkerFontProvider;
import com. itextpdf. tool. xml. XMLWorkerHelper;
import com. itextpdf. tool. xml. html. CssAppliers;
import com. itextpdf. tool. xml. html. CssAppliersImpl;
import com. itextpdf. tool. xml. html. Tags;
import com. itextpdf. tool. xml. parser. XMLParser;
import com. itextpdf. tool. xml. pipeline. css. CSSResolver;
import com. itextpdf. tool. xml. pipeline. css. CssResolverPipeline;
import com. itextpdf. tool. xml. pipeline. end. PdfWriterPipeline;
import com. itextpdf. tool. xml. pipeline. html. HtmlPipeline;
import com. itextpdf. tool. xml. pipeline. html. HtmlPipelineContext;
import freemarker. template. Configuration;
import freemarker. template. Template;
public class PDFUtil {
public static ByteArrayOutputStream createPdf ( String templateName, Map< String, Object> data) throws IOException, DocumentException {
Configuration configuration = new Configuration ( ) ;
try {
configuration. setDirectoryForTemplateLoading ( new File ( "模板保存的路径" ) ;
configuration. setDefaultEncoding ( "GBK" ) ;
Template template = configuration. getTemplate ( templateName) ;
String html = FreeMarkerTemplateUtils. processTemplateIntoString ( template, data) ;
ByteArrayOutputStream baos = new ByteArrayOutputStream ( ) ;
Document document = new Document ( ) ;
PdfWriter writer = PdfWriter. getInstance ( document, baos) ;
document. open ( ) ;
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider ( ) {
@Override
public Font getFont ( String fontname, String encoding, boolean embedded, float size, int style, BaseColor color) {
Font font = null ;
try {
font = new Font ( com. itextpdf. text. pdf. BaseFont. createFont ( "STSong-Light" , "UniGB-UCS2-H" , BaseFont. NOT_EMBEDDED ) ) ;
font. setStyle ( style) ;
font. setColor ( color) ;
if ( size> 0 ) {
font. setSize ( size) ;
}
} catch ( DocumentException e) {
e. printStackTrace ( ) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
return font;
}
} ;