/**
* 根据模板生成pdf
* @pdfName 文件名
* @param data Map(String,Object)
* @return 文件保存全路径
*/
public String createPDF(String pdfName,Map data) {
PdfReader reader = null;
AcroFields s = null;
PdfStamper ps = null;
ByteArrayOutputStream bos = null;
String realPath = ResourceBundle.getBundle("systemconfig").getString("upLoadFolder") + File.separator+"comfirmationDoc";
String dateFolder = DateFormatUtils.format(new Date(), "yyyyMMdd");
String folderPath = realPath +File.separator+ dateFolder;
//创建上传文件目录
File folder = new File(folderPath);
if(!folder.exists()){
folder.mkdirs();
}
//设置文件名
String fileName = pdfName+"_"+DateFormatUtils.format(new Date(), "yyyyMMddhhmmss")+".pdf";
String savePath = folderPath +File.separator+fileName ;
try {
String file = this.getClass().getClassLoader().getResource("comfirmTemplate.pdf").getPath();
//设置字体
String font = this.getClass().getClassLoader().getResource("YaHei.ttf").getPath();
reader = new PdfReader(file);
bos = new ByteArrayOutputStream();
ps = new PdfStamper(reader, bos);
s = ps.getAcroFields();
/**
* 使用中文字体 使用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体 Adobe 宋体 std L
*/
BaseFont bfChinese = BaseFont.createFont(font,BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
/**
* 设置编码格式
*/
s.addSubstitutionFont(bfChinese);
// 遍历data 给pdf表单表格赋值
for (String key : data.keySet()) {
if(data.get(key)!=null) {
s.setField(key, data.get(key).toString());
}
}
// 如果为false那么生成的PDF文件还能编辑,一定要设为true
ps.setFormFlattening(true);
ps.close();
FileOutputStream fos = new FileOutputStream(savePath);
fos.write(bos.toByteArray());
fos.flush();
fos.close();
return savePath;
} catch (IOException | DocumentException e) {
logger.error("pdf生成:读取文件异常");
e.printStackTrace();
return "";
} finally {
try {
bos.close();
reader.close();
} catch (IOException e) {
logger.error("pdf生成:关闭流异常");
e.printStackTrace();
}
}
}
/**
* 根据模板生成pdf
* @pdfName 文件名
* @param data Map(String,Object)
* @return 文件保存全路径
*/
public String createPDF(String pdfName,Map data) {
PdfReader reader = null;
AcroFields s = null;
PdfStamper ps = null;
ByteArrayOutputStream bos = null;
String realPath = ResourceBundle.getBundle("systemconfig").getString("upLoadFolder") + File.separator+"comfirmationDoc";
String dateFolder = DateFormatUtils.format(new Date(), "yyyyMMdd");
String folderPath = realPath +File.separator+ dateFolder;
//创建上传文件目录
File folder = new File(folderPath);
if(!folder.exists()){
folder.mkdirs();
}
//设置文件名
String fileName = pdfName+"_"+DateFormatUtils.format(new Date(), "yyyyMMddhhmmss")+".pdf";
String savePath = folderPath +File.separator+fileName ;
try {
String file = this.getClass().getClassLoader().getResource("comfirmTemplate.pdf").getPath();
//设置字体
String font = this.getClass().getClassLoader().getResource("YaHei.ttf").getPath();
reader = new PdfReader(file);
bos = new ByteArrayOutputStream();
ps = new PdfStamper(reader, bos);
s = ps.getAcroFields();
/**
* 使用中文字体 使用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体 Adobe 宋体 std L
*/
BaseFont bfChinese = BaseFont.createFont(font,BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
/**
* 设置编码格式
*/
s.addSubstitutionFont(bfChinese);
// 遍历data 给pdf表单表格赋值
for (String key : data.keySet()) {
if(data.get(key)!=null) {
s.setField(key, data.get(key).toString());
}
}
// 如果为false那么生成的PDF文件还能编辑,一定要设为true
ps.setFormFlattening(true);
ps.close();
FileOutputStream fos = new FileOutputStream(savePath);
fos.write(bos.toByteArray());
fos.flush();
fos.close();
return savePath;
} catch (IOException | DocumentException e) {
logger.error("pdf生成:读取文件异常");
e.printStackTrace();
return "";
} finally {
try {
bos.close();
reader.close();
} catch (IOException e) {
logger.error("pdf生成:关闭流异常");
e.printStackTrace();
}
}
}