利用iText导出pdf文件代码详解编程语言

根据给定的pdf模板,导出pdf文件,并根据给定内容替换pdf模板中的输入域。至于如何制作pdf模板,请参考Adobe公司的软件Acrobat,该软件对pdf模板的制作提供了很好的支持。 p.s.需要导入jiar包:itextpdf-5.4.1.jar。

一、导出pdf工具类:

 package pdf; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Iterator; 
import java.util.Map; 
import com.itextpdf.text.DocumentException; 
import com.itextpdf.text.pdf.AcroFields; 
import com.itextpdf.text.pdf.BaseFont; 
import com.itextpdf.text.pdf.PdfReader; 
import com.itextpdf.text.pdf.PdfStamper; 
/** 
 * 导出pdf工具类<br> 
 * 根据给定的pdf模板,导出pdf文件,并根据给定内容替换pdf中的输入域 
 * @author wangtl 
 * 
 */ 
public class ExportPdfUtil { 
    /** 
     *  
     * 导出pdf工具类 <br> 
     * 导出pdf工具类 
     *  
     * @param outpath 输出路径 
     * @param fontPath 字体路径 
     * @param templateName pdf模板文件路径名 
     * @param content 需要填充内容 
     * @return 
    */ 
    public static String exportpdf(String outpath, String templateName, String fontPath, Map<String, String> content) { 
        
        // 得到当前时间 
        Date now = new Date(); 
        SimpleDateFormat dataformat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); 
        String t = dataformat.format(now); 
        // 得到一个随机数 
        String ran = Math.random() + ""; 
        // 以当前时间加上一个随机数获取下载的文件以保证不重名 
        String filename = t + "-" + ran; 
          
        String savepath = outpath + File.separator + filename + ".pdf"; 
        PdfReader reader = null; 
        ByteArrayOutputStream bos = null; 
        PdfStamper ps = null; 
        FileOutputStream fos = null; 
        try { 
            // 创建字体 
            BaseFont chineseSong = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, 
                    BaseFont.EMBEDDED); 
            // 读取pdf 
            reader = new PdfReader(templateName); 
            bos = new ByteArrayOutputStream(); 
            ps = new PdfStamper(reader, bos); 
            AcroFields s = ps.getAcroFields(); 
            // 添加所创建的字体 
            s.addSubstitutionFont(chineseSong); 
              
            //找到pdf中输入域并替换为内容 
            Iterator<String> it = s.getFields().keySet().iterator(); 
            while(it.hasNext()){ 
             String name = (String) it.next(); 
                s.setField("" + name.trim(), content.get(name.trim())); 
            } 
            //这两步必须有,否则pdf生成失败 
            ps.setFormFlattening(true); 
            ps.close(); 
            //输出pdf 
            fos = new FileOutputStream(savepath); 
            fos.write(bos.toByteArray()); 
        } catch (FileNotFoundException e) { 
         System.out.println("FileNotFoundException"); 
         e.printStackTrace(); 
        } catch (Exception e) { 
         System.out.println("Exception"); 
         e.printStackTrace(); 
        } finally { 
            if (null != reader) { 
                reader.close(); 
            } 
            try { 
                if (null != bos) { 
                    bos.close(); 
                } 
            } catch (IOException e) { 
             System.out.println("failed to close ByteArrayOutputStream "); 
            } 
            try { 
                if (null != ps) { 
                    ps.close(); 
                } 
            } catch (DocumentException e) { 
             System.out.println("failed to close PdfStamper "); 
            } catch (IOException e) { 
             System.out.println("failed to close PdfStamper "); 
            } 
            try { 
                if (null != fos) { 
                    fos.close(); 
                } 
            } catch (IOException e) { 
             System.out.println("failed to close FileOutputStream "); 
            } 
        } 
        return filename; 
    } 
}

二、测试类:

 package test; 
import java.util.HashMap; 
import java.util.Map; 
import pdf.ExportPdfUtil; 
public class TestPdf { 
 public static void main(String[] args) { 
  Map<String,String> content=new HashMap<String,String>(); 
  content.put("name", "你好");//根据模板定义的输入域的名字(如:name),填充值 
 ExportPdfUtil.exportpdf("C://", "C://template.pdf", "c://windows//fonts//simsun.ttc,1", content); 
 } 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10565.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论