作者:小七蒙恩
来源:https://blog.csdn.net/qq_38105536
成果
使用word,制作一个模板
使用pdf编辑器,生成pdf模板。
我这里使用福昕pdf编辑器,其他pdf编辑器(如Adobe Acrobat)也可以用但是大多要钱。
1.从做好的word导入来创建pdf
2.插入文字域
右键文字域,填入字段与属性
3.插入选项域
导出值不要忘记填写,与代码对应上。
4.插入图片域,预插入签名和公章
注意:外观这里的边框和填充都选无色,否则图片会被填充色盖住;
注意:选项这里我们选择只显示标签。
5.模板做好了,我们进行保存。
java 实现
引入依赖
<dependency>
<groupId>com.itextpdfgroupId>
<artifactId>itextpdfartifactId>
<version>5.5.13.2version>
dependency>
<dependency>
<groupId>com.itextpdfgroupId>
<artifactId>itext-asianartifactId>
<version>5.2.0version>
dependency>
<dependency>
<groupId>com.itextpdf.toolgroupId>
<artifactId>xmlworkerartifactId>
<version>5.5.11version>
dependency>
代码实现
package com.tencent.qcloud.roomservice.webrtc.utils;
import com.alibaba.fastjson.JSONObject;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
/**
* @author dume
* @ClassName PdfTest
* @description: pdf模板操作
* @date 2024年07月26日
* @version: 1.0
*/
public class PdfTest {
public static void main(String[] args) {
//测试执行
FillTemplate(
"C:\\test\\申请表.pdf",
"C:\\test\\新申请表.pdf",
"杜小七",
"辽宁大连",
"跑步",
"Yes",
"Yes",
"Yes",
"C:\\test\\电子签名.png",
"C:\\test\\公章.png"
);
}
/**
* 根据模板生成pdf
* @param sourcesPath 原文件路径
* @param targetPath 生成文件路径
* @param name 参数
* @param address 参数
* @param hobby 参数
* @param select_1 选项
* @param select_2 选项
* @param select_3 选项
* @param signPath 签名图片路径
* @param gongzhangPath 公章图片路径
*/
public static void FillTemplate(
String sourcesPath,
String targetPath,
String name,
String address,
String hobby,
String select_1,
String select_2,
String select_3,
String signPath,
String gongzhangPath
){
//设置参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("name",name);
jsonObject.put("address",address);
jsonObject.put("hobby",hobby);
jsonObject.put("select_1",select_1);
jsonObject.put("select_2",select_2);
jsonObject.put("select_3",select_3);
// 填充创建pdf
PdfReader reader = null;
PdfStamper stamp = null;
ByteArrayOutputStream baos =null;
try {
reader = new PdfReader( sourcesPath);
File deskFile = new File(targetPath);
stamp = new PdfStamper(reader, new FileOutputStream(deskFile));
// 取出报表模板中的所有字段
AcroFields form = stamp.getAcroFields();
System.out.println(form.getFields().keySet());
//设置宋体
BaseFont song =BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
if (jsonObject != null) {
for (Map.Entry entry : jsonObject.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().toString();
//保存选项
if (key.startsWith("select")) {
form.setField(key, value, true);
//保存文字
}else {
form.setFieldProperty(key, "textfont", song, null);
form.setField(key, value);
}
}
}
//插入签名