JAVA使用itext根据模板生成PDF文档

时间:2023-03-09 12:55:40
JAVA使用itext根据模板生成PDF文档

1、制作PDF模板

网址打开:https://www.pdfescape.com/open/

JAVA使用itext根据模板生成PDF文档

我们这里先在线上把基础的内容用word文档做好,然后转成PDF模板,直接上传到网站上,这样方便点

假设我们pdf是这样

JAVA使用itext根据模板生成PDF文档

然后我们选择文件上传到网站上之后,如下图所示

JAVA使用itext根据模板生成PDF文档

选择文件后,点击upload ,或者可以把文件直接用鼠标拖到Drop PDF Here的位置,也会直接上传,上传成功之后会跳转页面,所下图所示

JAVA使用itext根据模板生成PDF文档

接着我们可以进行操作,点击左上角 Form Field,这个是插入字段(你可以理解成是java中文档要用的占位符)

JAVA使用itext根据模板生成PDF文档

选择对应的text,如有需要,可以选择其他的模式,好了之后,点击Select

JAVA使用itext根据模板生成PDF文档

选择之后用按住鼠标左键,划定要显示的区域(绿色区域)

JAVA使用itext根据模板生成PDF文档

然后把鼠标放到绿色区域,点击鼠标右键,点击Object Properties设置属性名称

JAVA使用itext根据模板生成PDF文档

JAVA使用itext根据模板生成PDF文档

userName 就是我们到时候在代码中要替换的属性名,好了之后点击OK,然后依次设置其他的内容

还可以选中某个表单域,可以对字体、大小等进行设置(线上版本不支持编辑字体样式、具体可以查看 https://www.pdfescape.com/windows/  需要下载软件)

JAVA使用itext根据模板生成PDF文档

然后点击鼠标左侧的保存按钮,或者直接按ctrl+s 也可以直接保存,保存之后点击下方的下载按钮,把我们设置的pdf文档下载下来

JAVA使用itext根据模板生成PDF文档

以上模板就制作好了。 网站还有很多其他的功能,需要的可以自己去研究使用。

接着是代码书写

1、引入jar包   iText-2.1.7.jar、itextasian-2.1.7.jar、itext-rtf-2.1.7.jar

下载地址:https://yvioo.lanzous.com/b00nq830b
                      密码:g912

2、这里只是一个简单的demo方法,可以根据自己需要改写

package com.pdf;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map; import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper; public class Test {
public static void main(String[] args) throws Exception {
export();
System.out.println("生成完成");
} public static void export(){
try {
// pdf模板所在路径,就是网站制作好后下载的pdf模板路径
String fileName = "D:/testpdf.pdf";
PdfReader reader = new PdfReader(fileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper ps = new PdfStamper(reader, bos); // 使用中文字体
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();
fontList.add(bf); AcroFields fields = ps.getAcroFields();
fields.setSubstitutionFonts(fontList);
fillData(fields, data()); //必须要调用这个,否则文档不会生成的
ps.setFormFlattening(true);
ps.close(); //生成pdf路径存放的路径
OutputStream fos = new FileOutputStream("D:/result.pdf");
fos.write(bos.toByteArray());
fos.flush();
fos.close();
bos.close();
}catch (Exception e){
e.printStackTrace();
}
} /**
* 填充模板中的数据
*/
public static void fillData(AcroFields fields, Map<String, String> data) {
try {
for (String key : data.keySet()) {
String value = data.get(key);
// 为字段赋值,注意字段名称是区分大小写的
fields.setField(key, value);
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 填充数据源
* 其中data存放的key值与pdf模板中的文本域值相对应
*/
public static Map<String, String> data() {
Map<String, String> data = new HashMap<String, String>();
data.put("schoolName", "国际测试测试测试测试");
data.put("userName", "yvioo");
data.put("date", "2020/7");
return data;
}
}