利用iText导出pdf文件代码
发布时间:2020-05-24 21:56:22 所属栏目:Java 来源:互联网
导读:利用iText导出pdf文件代码
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 根据给定的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);
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
