1.首先需要使用Adobe Acrobat软件来对PDF进行处理,生成PDF模板。生成类似于下图的模板编辑框
2.使用PdfReader对模板文件流进行编辑。插入数据。示例代码如下
//POM 文件引入
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.2</version>
</dependency>
//java代码
package xxxxx;
import com.itextpdf.text.pdf.*;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
@Slf4j
public class PDFInsertValueUtil {
public static byte[] PDFInsertValue (String src,String value1,String value2) throws Exception {
try {
PDFInsertValueUtil pdfInsertValueUtil = new PDFInsertValueUtil();
InputStream is = null;
//linux
String url = "config/static/pdf/" + src+".pdf";
log.info("url : "+url);
File file = new File(url);
is = new FileInputStream(file);
//window
// is = pdfInsertValueUtil.getClass().getClassLoader().getResourceAsStream(
"static/pdf/"+src+".pdf");
//因为window和linux静态文件存放的位置并不一定一致,所以这个获取路径的方法需要根据实际需求,来改变。
PdfReader reader = new PdfReader(is);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
form.setField("Key1", value1);
form.setField("Key2", value2);
stamper.setFormFlattening(true);// true时关闭pdf的表单编辑功能
//stamper.getAcroFields().setGenerateAppearances(true); //如果生成的pdf表单项无内容 打开这行代码
// 关闭表单编辑功能,必须GenerateAppearances = true后,生成出的pdf才会显示表单填写的内容
stamper.close();
bos.toByteArray();
return bos.toByteArray();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
// throw new RuntimeException();
}
}