PDFFillInformationUtil.java 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package com.kingdee.eas.custom.shengshen.utils;
  2. import com.itextpdf.text.pdf.AcroFields;
  3. import com.itextpdf.text.pdf.PdfReader;
  4. import com.itextpdf.text.pdf.PdfStamper;
  5. import java.io.ByteArrayOutputStream;
  6. import java.io.IOException;
  7. import java.util.Iterator;
  8. import java.util.Map;
  9. public class PDFFillInformationUtil {
  10. /**
  11. * 给pdf填充数据
  12. * @param fileName 原始文件名
  13. * @param field map<String,String> key 为字段名,value 为填充值
  14. * @return 填充后的文件 文件类型为byte[]
  15. */
  16. public byte[] fillInformation(String fileName, Map<String,String> field) throws IOException {
  17. //http://169.254.157.139:6888/easWebClient/download/DSF_Mod_373.pdf
  18. String url = "http://169.254.157.139:6888/easWebClient/download/"+fileName;
  19. byte[] bytesByNetURL = HttpClient3.getBytesByNetURL(url);
  20. try {
  21. System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
  22. // 读取PDF模板
  23. PdfReader pdfReader = new PdfReader(bytesByNetURL);
  24. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  25. // 创建需就改PDF文件
  26. PdfStamper pdfStamper = new PdfStamper(pdfReader, baos);
  27. AcroFields form = pdfStamper.getAcroFields();
  28. // 设置字段数据
  29. Iterator<Map.Entry<String, String>> iterator = field.entrySet().iterator();
  30. while (iterator.hasNext()) {
  31. Map.Entry<String, String> entry = iterator.next();
  32. String key = entry.getKey();
  33. String value = entry.getValue();
  34. //给字段添加值
  35. form.setField(key, value);
  36. }
  37. //生成后的pdf 可以在编辑
  38. pdfStamper.setFormFlattening(false);
  39. // 关闭修改器,并释放资源
  40. pdfStamper.close();
  41. pdfReader.close();
  42. return baos.toByteArray();
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. throw new RuntimeException("pdf 填充数据失败!!");
  46. }
  47. }
  48. }