使用iText 将html页面转PDF文件(itext+freemarker)

1.导入jar包(使用maven管理)

  <!--itext  start-->
		<dependency>
			<groupId>com.lowagie</groupId>
			<artifactId>itext</artifactId>
			<version>2.0.8</version>
		</dependency>

		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>

		<dependency>
			<groupId>com.lowagie</groupId>
			<artifactId>itext-rtf</artifactId>
			<version>2.1.7</version>
		</dependency>
		
		<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>org.jsoup</groupId>
		<artifactId>jsoup</artifactId>
		<version>1.8.3</version>
	</dependency>

	<dependency>
		<groupId>org.xhtmlrenderer</groupId>
		<artifactId>core-renderer</artifactId>
		<version>R8</version>
	</dependency>
		 <!--itext  end-->
2.编写处理类HtmlToPDF.java
<pre name="code" class="java">
import java.awt.Color;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.itextpdf.text.pdf.BaseFont;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;


public class HtmlToPDF {
    
	private static HtmlToPDF instance=new HtmlToPDF();
	private HtmlToPDF()
	{
		
	}
	public static HtmlToPDF getInstance()
	{
		return instance;
	}
	
	
	private String basePath=this.getClass().getResource("").getPath()+"template";
	private String tmppdfPath = "D:/常用/深圳项目/新建文件夹/template/pdf";//pdf路径
	
	
       
      //<span style="font-family: Arial, Helvetica, sans-serif;">archiveInfoMap放置要传递给模版的参数</span>

	private String preExportPdf(Map<String,Object> archiveInfoMap) throws Exception
	{   UUID uuid = UUID.randomUUID();
        String outputFile = tmppdfPath + "/" + uuid + ".pdf"; //生成的PDF名
	
        //STEP1:使用freemarker 将模版页面生成要转的html页面
 
        //a.创建一个合适的Configration对象
        Configuration configuration = new Configuration();
       // configuration.setDirectoryForTemplateLoading(new File(basePath));//方式一:使用绝对路径设置模版路径
        configuration.setClassForTemplateLoading(this.getClass(), "template");//方式二:使用所在类的相对路径设置模版路径
        configuration.setObjectWrapper(new DefaultObjectWrapper());
        configuration.setDefaultEncoding("UTF-8");   //这个一定要设置,不然在生成的页面中 会乱码
        //b.获取或创建一个模版
        Template template = configuration.getTemplate("test3.html");

        String outPutFileName = basePath+"/"+unitId+".html"; //生成的html名
        Writer writer  = new OutputStreamWriter(new FileOutputStream(outPutFileName),"UTF-8");
        
       //c.使用template将数据注入模版页面生成要转pdf的html页面
        template.process(archiveInfoMap, writer);
        writer.flush();
      
        
       //STEP2:使用itext将html页面转成PDF文件
        OutputStream os = new FileOutputStream(outputFile);
        
       // String url=new File(outPutFileName).toURI().toURL().toString();
        String url=new File(outPutFileName).toURI().toURL().toString();
       //生成ITextRenderer实例
        ITextRenderer renderer = new ITextRenderer(); 
        //关联html页面
        renderer.setDocument(url);
       
       //设置获取图片的基本路径
        renderer.getSharedContext().setBaseURL(new File(basePath).toURI().toURL().toString());
        //解决中文问题(模版页面test3.html配套加上<style mce_bogus="1" type="text/css">  
        //                                              body {font-family: SimSun; background:none;margin-left: auto;margin-right: auto;}  
        //                                           </style>)
        ITextFontResolver fontResolver = renderer.getFontResolver();   
       
        fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
  

        renderer.layout();
        
        
        renderer.createPDF(os);
         
      
        
        writer.close();
        os.close();
        File file =new File(outPutFileName); 
		return outputFile;
 }
	    	  
	
	public String exportPdf(Map baseInfoMap,String imgURL) throws Exception
	{		              
		     String pdfFilename = preExportPdf(baseInfoMap);
		     System.out.println("个人档案pdf导出成功:["+pdfFilename+"]");
		     return pdfFilename;
	}	
	
	
}


 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值