1、导入依赖
<!--PDF-->
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2、生成pdf
public void createPDF(List<DeviceUserParamVo> tbEquipInfos, String baseUrl, String path){
List<PdfReader> list = new ArrayList();
try {
int pageNum = 1;
for (DeviceUserParamVo tbEquipInfo: tbEquipInfos) {
//项目路径
final BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
final String[] splits = tbEquipInfo.getDevicePhoto().split(";");
// PdfReader reader= new PdfReader("C:\\Users\\Administrator\\Desktop\\sd.pdf");
ClassPathResource classPathResource = new ClassPathResource("pdfTemplate/sd.pdf");
InputStream inputStream = classPathResource.getInputStream();
PdfReader reader= new PdfReader(inputStream);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfReader pdfReader = null;
PdfStamper ps = new PdfStamper(reader, bos);
//提取表单
AcroFields s = ps.getAcroFields();
s.setFieldProperty("XM", "textfont", font, null);
s.setFieldProperty("SFZH", "textfont", font, null);
s.setFieldProperty("SZS", "textfont", font, null);
s.setFieldProperty("SZSHI", "textfont", font, null);
s.setFieldProperty("SZX", "textfont", font, null);
s.setFieldProperty("SZZ", "textfont", font, null);
s.setFieldProperty("SZC", "textfont", font, null);
s.setFieldProperty("XXDZ", "textfont", font, null);
s.setFieldProperty("GZLX", "textfont", font, null);
s.setFieldProperty("SBPP", "textfont", font, null);
s.setFieldProperty("SBXH", "textfont", font, null);
s.setFieldProperty("CNMJ", "textfont", font, null);
s.setFieldProperty("DBH", "textfont", font, null);
s.setFieldProperty("AZRY", "textfont", font, null);
s.setFieldProperty("AZRYLXFS", "textfont", font, null);
s.setField("XM" , tbEquipInfo.getName()==null ? "":tbEquipInfo.getName());
s.setField("LXFS",tbEquipInfo.getPhoneNumber() == null ? "" :tbEquipInfo.getPhoneNumber());
s.setField("SFZH",tbEquipInfo.getCardId() == null ? "" :tbEquipInfo.getCardId());
s.setField("GDDH",tbEquipInfo.getLandlineNumber() == null ? "" :tbEquipInfo.getLandlineNumber());
s.setField("SZS",tbEquipInfo.getProvince() == null ? "" :tbEquipInfo.getProvince());
s.setField("SZSHI",tbEquipInfo.getCity() == null ? "" :tbEquipInfo.getCity());
s.setField("SZX",tbEquipInfo.getCounty() == null ? "" :tbEquipInfo.getCounty());
s.setField("SZZ",tbEquipInfo.getTown() == null ? "" :tbEquipInfo.getTown());
s.setField("SZC",tbEquipInfo.getVillage() == null ? "" :tbEquipInfo.getVillage());
s.setField("XXDZ",tbEquipInfo.getAddress() == null ? "" :tbEquipInfo.getAddress());
s.setField("SBBM",tbEquipInfo.getDeviceNumber() == null ? "" :tbEquipInfo.getDeviceNumber());
s.setField("GZLX",tbEquipInfo.getRemouldTypeName() == null ? "" :tbEquipInfo.getRemouldTypeName());
s.setField("SBPP",tbEquipInfo.getDeviceBrandName() == null ? "" :tbEquipInfo.getDeviceBrandName());
s.setField("SBXH",tbEquipInfo.getDeviceTypeName() == null ? "" :tbEquipInfo.getDeviceTypeName());
s.setField("CNMJ",tbEquipInfo.getHeatingArea() == null ? "" :tbEquipInfo.getHeatingArea());
s.setField("DBH",tbEquipInfo.getMeterNumber() == null ? "" :tbEquipInfo.getMeterNumber());
s.setField("AZRY",tbEquipInfo.getInstaller() == null ? "" :tbEquipInfo.getInstaller());
s.setField("AZRYLXFS",tbEquipInfo.getInstallerPhone() == null ? "" :tbEquipInfo.getInstallerPhone());
s.setField("SBJHRQ",tbEquipInfo.getActivationDate() == null ? "" :tbEquipInfo.getActivationDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
s.setField("PAGE",pageNum+"");
PdfContentByte underContent = ps.getOverContent(1);
if(splits.length == 1){//一张图片
final Rectangle tu = s.getFieldPositions("TU").get(0).position;
URL url = new URL(splits[0]);
final Image image = Image.getInstance(url);
if(image != null){
float width = image.getPlainWidth();
float height = image.getPlainHeight();
if(height > width){//纵向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth(), (float)(tu.getHeight()*0.9));
// 添加图片
image.setAbsolutePosition(100,60);
underContent.addImage(image);
}else{//横向图片
// 根据域的大小缩放图片
image.scaleToFit((float)(tu.getWidth()*0.9), (float)(tu.getHeight()*0.9));
// 添加图片
image.setAbsolutePosition(100,60);
underContent.addImage(image);
}
}
}else if(splits.length == 2){//两张图片
final Rectangle tu = s.getFieldPositions("TU").get(0).position;
URL url = new URL(splits[0]);
final Image image = Image.getInstance(url);
if(image != null){
float width = image.getPlainWidth();
float height = image.getPlainHeight();
if (height > width) {//纵向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth()/2, (float) ((tu.getHeight()*0.9)));
// 添加图片
image.setAbsolutePosition(100,60);
underContent.addImage(image);
}else{//横向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth()/2, (float) ((tu.getHeight()*0.9)));
// 添加图片
image.setAbsolutePosition(82,120);
underContent.addImage(image);
}
}
URL url2 = new URL(splits[1]);
final Image image2 = Image.getInstance(url2);
if(image2 != null){
float width = image2.getPlainWidth();
float height = image2.getPlainHeight();
if(height > width){//纵向图片
// 根据域的大小缩放图片
image2.scaleToFit(tu.getWidth()/2, (float) ((tu.getHeight()*0.9)));
// 添加图片
image2.setAbsolutePosition(100+tu.getWidth()/2,60);
underContent.addImage(image2);
}else{//横向图片
// 根据域的大小缩放图片
image2.scaleToFit(tu.getWidth()/2, (float) ((tu.getHeight()*0.9)));
// 添加图片
image2.setAbsolutePosition(82+tu.getWidth()/2,120);
underContent.addImage(image2);
}
}
}else if(splits.length == 3){
final Rectangle tu = s.getFieldPositions("TU").get(0).position;
URL url = new URL(splits[0]);
Image image = Image.getInstance(url);
if(image != null){
float width = image.getPlainWidth();
float height = image.getPlainHeight();
if(height > width){//纵向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
// 添加图片
image.setAbsolutePosition(80,60);
underContent.addImage(image);
}else{//横向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
// 添加图片
image.setAbsolutePosition(82,120);
underContent.addImage(image);
}
}
url = new URL(splits[1]);
image = Image.getInstance(url);
if(image != null){
float width = image.getPlainWidth();
float height = image.getPlainHeight();
if(height > width){//纵向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
// 添加图片
image.setAbsolutePosition(80+tu.getWidth()/3,60);
underContent.addImage(image);
}else{//横向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
// 添加图片
image.setAbsolutePosition(82+tu.getWidth()/3,120);
underContent.addImage(image);
}
}
url = new URL(splits[2]);
image = Image.getInstance(url);
if(image != null){
float width = image.getPlainWidth();
float height = image.getPlainHeight();
if(height > width){//纵向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
// 添加图片
image.setAbsolutePosition(80+tu.getWidth()/3*2,60);
underContent.addImage(image);
}else{//横向图片
// 根据域的大小缩放图片
image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
// 添加图片
image.setAbsolutePosition(82+tu.getWidth()/3*2,120);
underContent.addImage(image);
}
}
}
ps.setFormFlattening(true);
ps.close();
pdfReader = new PdfReader(bos.toByteArray());
list.add(pdfReader);
pageNum++;
}
Document document = new Document();
OutputStream outputStream = new FileOutputStream(new File(baseUrl+path+".pdf"));
// OutputStream outputStream = new FileOutputStream(new File("E:\\"+path+".pdf"));
PdfCopy copy = new PdfCopy(document, outputStream);
document.open();
for (int k = 0; k < list.size(); k++) {
PdfReader pdfReader = list.get(k);
document.newPage();
copy.addDocument(pdfReader);
}
copy.close();
}catch (Exception e){
e.printStackTrace();
log.error("=======导出pdf===="+e.getMessage());
}
}