加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

利用iText导出pdf文件代码

发布时间:2020-12-15 03:20:07 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 根据给定的pdf模板,导出pdf文件,并根据给定内容替换pdf模板中的输入域。至于如何制作pdf模板,请参考Adobe公司的软件Acrobat,该软件对pdf模板的制

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

根据给定的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);
 }
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读