生成pdf文件
一,准备工具
Adobe Acrobat下载~提取码: nd3g
Adobe Acrobat 9 Pro安装步骤
1、将压缩包解压后,使用鼠标左键双击打开安装文件。
2、进入安装程序,直接点击“下一步”。
3、选择Acrobat的安装类型。选择“典型”可以使用Acrobat的大部分主要功能,基本不会影响日常使用;选择“完整”将安装Acrobat的全部功能模块;选择“自定义”的话,用户可以自行决定需要安装的组件。选好后点击“下一步”。
4、在列表中选择需要的功能。然后点击“更改”按钮选择Acrobat的安装目录,此处不建议安装在C盘,如果C盘文件过多的话,会影响计算机的运行速度。选定后点击“下一步”。
5、点击下方的“安装”按钮开始安装。
6、安装结束后,会自动跳转至安装完成界面,这时会出现首次使用的提示,最后点击“完成”按钮即可。
二,制作模板
1,新建文档.docx (word文档)并编写内容
2,另存为.pdf格式文件
3,使用Adobe Acrobat打开.pdf文件,进入表单–>添加或编辑域
4,修改名称(对应代码)
模板准备完毕~~
三,编写代码
1,导入依赖:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
2,编写工具包
工具包获取~提取码: 25au
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.*;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
public class PdfUtils {
public void pdfout(Map<String, Object> map) {
// 模板路径
String modeurl = "C:\\Users\\litianqi\\Desktop\\2.pdf";
// 生成的新文件路径
String newPdfurl = "C:\\Users\\litianqi\\Desktop\\testout1.pdf";
PdfReader reader;
FileOutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
//设置字体 字体库/名字 自己可以换
BaseFont bf = BaseFont.createFont("c://windows//fonts//STCAIYUN.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
out = new FileOutputStream(newPdfurl);// 输出流
reader = new PdfReader(modeurl);// 读取pdf模板
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
//文字类的内容处理
Map<String, String> datemap = (Map<String, String>) map.get("body");
form.addSubstitutionFont(bf);
for (String key : datemap.keySet()) {
String value = datemap.get(key);
form.setField(key, value);
}
stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
stamper.close();
Document doc = new Document();
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
3,测试
@Test
public void contextLoads2() {
Map<String, String> map = new HashMap();
map.put("zip", "043800");
map.put("name", "山西省运城市闻喜");
Map<String, Object> result = new HashMap();
result.put("body", map);
PdfUtils pdfUtils = new PdfUtils();
pdfUtils.pdfout(result);
}