import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import com.itextpdf.text.pdf.codec.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Snippt { private static final Logger logger = LoggerFactory.getLogger(Snippt.class); // 利用模板生成pdf public static BaseResponse fillTemplate(Map<String,Object> data) { BaseResponse baseResponse = new BaseResponse(); // 模板路径 String templatePath = "C:/Users/chenjun32853/Desktop/pdf/pdf2.pdf"; // 生成的新文件路径 String newPDFPath = "C:/Users/chenjun32853/Desktop/pdf/1.pdf"; PdfReader reader = null; FileOutputStream out = null; ByteArrayOutputStream bos = null; PdfStamper stamper = null; Document doc = null; try { out = new FileOutputStream(newPDFPath);// 输出流 reader = new PdfReader(templatePath);// 读取pdf模板 bos = new ByteArrayOutputStream(); stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); String[] str = {"123456789", "TOP__ONE", "男", "1991-01-01", "130222111133338888", "浙江省杭州市"}; int i = 0; java.util.Iterator<String> it = form.getFields().keySet().iterator(); while (it.hasNext()) { String name = it.next().toString(); System.out.println(name); if (name.contains("p")) { // String fieldName = "picture"; // 通过域名获取所在页和坐标,左下角为起点 int pageNo = form.getFieldPositions(name).get(0).page; Rectangle signRect = form.getFieldPositions(name).get(0).position; float x = signRect.getLeft(); float y = signRect.getBottom(); // 读图片 final String img = base64的图片; Image image = null; try { image = Image.getInstance(Base64.decode(img)); } catch (BadElementException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 获取操作的页面 PdfContentByte under = stamper.getOverContent(pageNo); // 根据域的大小缩放图片 image.scaleToFit(signRect.getWidth(), signRect.getHeight()); // 添加图片 image.setAbsolutePosition(x, y); under.addImage(image); } else { form.setField(name, str[i++]); } } stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true stamper.close(); doc = new Document(); PdfCopy copy = new PdfCopy(doc, out); doc.open(); PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage); doc.close(); baseResponse.setCode(CommonErrorCodeEnum.SUCCESS.getCode()); baseResponse.setMessage(CommonErrorCodeEnum.SUCCESS.getMessage()); } catch (IOException e) { logger.error("流异常", e); baseResponse.setCode(CommonErrorCodeEnum.ERROR.getCode()); baseResponse.setMessage("流异常"); } catch (DocumentException e) { logger.error("模板异常", e); baseResponse.setCode(CommonErrorCodeEnum.ERROR.getCode()); baseResponse.setMessage("模板异常"); } finally { if (out != null) { try { out.close(); } catch (Exception e) { logger.error("io异常", e); } } if (bos != null) { try { bos.close(); } catch (Exception e) { logger.error("io异常", e); } } if (stamper != null) { try { stamper.close(); } catch (Exception e) { logger.error("stamper异常", e); } } if (doc != null) { try { doc.close(); } catch (Exception e) { logger.error("stamper异常", e); } } } return baseResponse; } public static void main(String[] args) { Map map = new HashMap<String,Object>(); fillTemplate(map); } }
java使用pdf模板导出pdf
最新推荐文章于 2024-07-20 16:46:26 发布