利用iText导出pdf文件

一、导出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);
 }
}
时间: 2024-10-20 08:00:08

利用iText导出pdf文件的相关文章

Java Itext 生成PDF文件

利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URL; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Arr

利用itextsharp导出pdf

在项目中,客户要求把一些表格导出pdf格式,在网上找了好久终于发现一个完美的解决方案,利用itextsharp可以很方便的导出pdf文件,不说太多了,直接上图,有图有真相 首先是页面图片 然后是导出的pdf图片 导出pdf代码如下: //导出Mold pdf文档 public void exportpdf_Mold(string quotenum, string fullpath) { string pdfName = quotenum + ".pdf"; string savePat

纯前端导出pdf文件

纯前端js导出pdf,已经用于生产环境. 工具: 1.html2canvas,一种让html转换为图片的工具. 2.pdfmake或者jspdf ,一种生成.编辑pdf,并且导出pdf的工具. pdfmake:http://pdfmake.org 优点: 能够支持中文,具有部分自适应布局功能,需要vfs_fonts.js字体文件. 缺点:支持中文的vfs_fonts.js文件一般较大. 如果图片过大,不会自动分页. 生成vfs_fonts.js文件的方法如图,npm install pdfmak

利用Extjs导出excel文件(转)

最近在做一个项目,需要在原先的表格的基础上导出excel文件,原先是想用java后台来实现这个功能,但是,后来发现,原来extjs也附带有导出excel表的功能,就在GridPanel的基础上导出,http://www.blogjava.net/rockblue1988/archive/2012/02/29/370977.html,这是我做的时候,参考的一篇网上的文章.具体的做法是,将extjsGridPanel里面的数据拿出来,转换成xml,然后发送给后台,后台响应之后,将数据输出为Excel

itext生成PDF文件报错“Font &#39;STSong-Light&#39; with &#39;UniGB-UCS2-H&#39; is not recognized.”

最近需要写一个抽取表结构的工具,类似于powerdesigner中的表图,其中有一步用到了itext这个第三方jar包来生成pdf文件,碰到了一个问题,记录于此. 问题描述: 工程使用maven构建,pom.xml中对于jar包的定义如下: <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</vers

Java导出pdf文件数据

提示:导出pdf文件,需要3个jar包iText-2.1.5.jar,iTextAsian.jar,iText-rtf-2.1.4.jar. public boolean outputPdfJhsy(EntityBean data) { try { Global.getInstance().LogApp("导出pdf开始"); String pdfpath = File.get("LEAP/NSESTModule/WRModule/nsjhsyzm.pdf").ge

C#:IText构造PDF文件

IText构造PDF文件 1.1 生成Document Document是我们要生成的PDF文件所有元素的容器,因此要生成一个PDF文档,必须首先定义一个Document对象. Document有三种构造函数:    public Document():    public Document(Rectangle pageSize):    public Document(Rectangle pageSize, float marginLeft,    float marginRight, flo

Mac下使用JupyterNotebook导出pdf文件

通过Latex输出中文PDF 安装latex可以选择完整安装,和安装latex-base版本.完整安装仅安装包就有约2.7G,latex-base是一个基础包,安装包100M左右,安装需要400M不到的空间.我们目前仅需要通过latex输出PDF文档,所以不需要安装完整安装.使用latex-base就可以了.但是latex-base安装后,不能直接使用,还需要一些额外操作才能正常支持中文格式. Latex在 Mac OS中 叫MacTex. 安装BasicTex 从官网下载BaisicTex安装

新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)

废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acrobat 打开你刚刚用word转换成的pdf 会出现如下界面 下一步 点击浏览,选择刚才你转换好的pdf 下一步 4.打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框,有的人说要改成中文字体,可是我没有改一样成功啦 5.一般情况下不需要修改什么东西,至少我没有修改哦 6.直