文档章节

利用iText导出pdf文件

wangrikui
 wangrikui
发布于 2015/08/20 16:40
字数 516
阅读 672
收藏 4

一、导出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);
 }
}

© 著作权归作者所有

wangrikui
粉丝 10
博文 31
码字总数 20614
作品 0
南京
后端工程师
私信 提问
使用iText库创建PDF文件

原文地址:使用iText库创建PDF文件 阅读目录 前言 iText库概述 iText库常用类 iText Hello World示例 给PDF文件设置文件属性 PDF中添加图片 PDF中创建表格 PDF中创建列表 PDF中设置样式/格式...

spinachgit
2017/10/24
0
0
java操作PDF(PDFBOX和Itext框架)

java有很多可以操作pdf的框架,pdfbox和itext就是其中的两种 pdfbox有如下作用 提取文本,包括Unicode字符。 和Jakarta Lucene等文本搜索引擎的整合过程十分简单。 加密/解密PDF文档。 从PDF...

王小明123
2013/07/24
0
0
关于Birt source的讨论和疑问

最近遇到一个头疼的问题,客户需求使用Myriad-Italic字体显示某些栏位,在模板中设出来以后,并不能正确显示,而是显示成Myriad,也就是说没有斜体。 为什么不能显示成Myriad-Italic呢?这个...

aine_pan
2012/09/24
296
0
java(iText)工具包生成PDF

PDF操作类库 iText iText是一个非常著名的能够快速产生PDF文件的Java类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合 iText的更新变化很大,早期版本在PDF样式上可能会有瑕...

王念博客
2016/04/01
0
2
Struts 中结合 JFreeChart,iText 生成 PDF 报表

本文中向读者朋友提供了一种 PDF 报表系统的解决方案,并将重点放在如何整合开源框架以实现系统要求,以及如何解决实际开发过程中的疑难问题上,对于广大的开源框架爱好者和开发人员具有一定...

红薯
2011/02/11
2.7K
5

没有更多内容

加载失败,请刷新页面

加载更多

GitOps 初探

前言 GitOps 的概念最初来源于 Weaveworks 的联合创始人 Alexis 在 2017 年 8 月发表的一篇博客 GitOps - Operations by Pull Request。文章介绍了 Weaveworks 的工程师如何以 Git 作为事实的...

阿里云云栖社区
26分钟前
1
0
keytool生成密钥

生成JKS Java KeyStore文件 我们首先使用命令行工具keytool生成密钥 - 更具体地说.jks文件: keytool -genkeypair -alias mytest -keyalg RSA ...

Canaan_
28分钟前
2
0
【从入门到放弃-Java】并发编程-NIO使用

前言 上文【从入门到放弃-SpringBoot】SpringBoot源码分析-请求过程中我们了解到,tomcat接收、返回请求的过程都是基于NIO实现的。日常工作中有很多基于NIO的使用,我们知道NIO可以提高系统的...

阿里云官方博客
29分钟前
3
0
mysql 如何删除数据库中所有的表

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_schema = 'mydb'; mydb换成你想删除的数据库的名字......

RobertZhou
30分钟前
3
0
pytorch各种版本下载

链接地址:https://pytorch.org/get-started/previous-versions/

云烟成雨forever
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部