1.下载Adobe破解版PDF编辑软件(已上传请自取 解压密码@vposy)
下载安装 就是这么个东西
2. 创建/编辑模板PDF文件表单
这一个个的灰色格子就是表单元素,待会就可以通过java代码去给其赋值,双击表单元素配置样式。
“名称”就是取一个标识名称,待会java代码直接给这个标识赋值。
随便统一一下文字大小、字体,免得后面样式不统一,内容巨难看。一般情况下都是用户发来的word直接转成pdf,然后增加表单元素,修改样式,就下来就是填充内容。
3.搞个JAVA工具类填充一下表单元素内容
import java.awt.image.BufferedImage;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
public class PdfDown {
/**
* @param inputmap 填充内容
* @param templatePath 模板路径
* @param response
* @param request
* @return
*/
public static String pdfout(Map<String, String> inputmap, String templatePath, HttpServletResponse response, HttpServletRequest request) {
// 生成的新文件路径
String fileName = "随便取个名字" + "_" + DateFormatUtils.format(new Date(), "yyyyMMddhhmmss") + ".pdf";
String newPDFPath = templatePath + File.separator + fileName;
// 模板路径
templatePath = templatePath + File.separator + "模板哦.pdf";
try {
FileOutputStream out;
// 取pdf模板页数
int num = new PdfReader(templatePath).getNumberOfPages();
ByteArrayOutputStream bos[] = new ByteArrayOutputStream[num];
// 输出流
out = new FileOutputStream(newPDFPath);
// 新建一个文档
Document doc = new Document();
// 用于保存原页面内容,然后输出
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
for (int i = 0; i < num; i++) {
bos[i] = new ByteArrayOutputStream();
// 读取pdf模板
PdfReader reader = new PdfReader(templatePath);
PdfStamper stamper = new PdfStamper(reader, bos[i]);
// 获取文本域
AcroFields form = stamper.getAcroFields();
form.addSubstitutionFont(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED));
// 文字类的内容处理
Map<String, String> datemap = inputmap;
for (String key : datemap.keySet()) {
String value = datemap.get(key);
if (StringUtils.isNotEmpty(value)) {
form.setField(key, value, true);
} else {
form.setField(key, "");
}
}
// 如果为false那么生成的PDF文件还能编辑,一定要设为true
stamper.setFormFlattening(true);
stamper.close();
}
PdfImportedPage page;
for (int i = 0; i < num; i++) {
page = copy.getImportedPage(new PdfReader(bos[i].toByteArray()), i + 1);
copy.addPage(page);
}
doc.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return newPDFPath;
}
}