当前位置:   article > 正文

java通过pdf-box插件完成对pdf文件中图片/文字的替换_java实现pdf替换文字

java实现pdf替换文字

需要引入的Maven依赖:

  1. <!-- pdf替换图片 -->
  2. <dependency>
  3. <groupId>e-iceblue</groupId>
  4. <artifactId>spire.pdf.free</artifactId>
  5. <version>5.1.0</version>
  6. </dependency>

java代码:

  1. public AjaxResult replacepdf(MultipartFile file) {
  2. try {
  3. //初始化 PdfDocument 类的实例
  4. PdfDocument doc = new PdfDocument();
  5. PdfDocument doc1 = null;
  6. int fileType = 0;
  7. doc.loadFromStream(file.getInputStream());
  8. //加载 PDF 文档
  9. //region 单页模板替换
  10. if (doc.getPages().getCount() <= 1) {
  11. //获取所需的页面
  12. PdfPageBase page = doc.getPages().get(0);
  13. //region 获取原图大小 位置
  14. PdfImageInfo[] imagesInfo = page.getImagesInfo();
  15. //获取指定图片的坐标
  16. Rectangle2D bounds = imagesInfo[imagesInfo.length - 1].getBounds();
  17. double x = bounds.getX();
  18. double y = bounds.getY();
  19. double width = bounds.getWidth();
  20. double height = bounds.getHeight();
  21. //endregion
  22. //替换公章
  23. PdfImage image2 = PdfImage.fromFile(uploadPath + "//zryk//zrykseal//img//zrykseal.jpg");
  24. page.deleteImage(imagesInfo.length - 1);
  25. page.getCanvas().drawImage(image2, x + 40, y, 87, 87);
  26. PdfImage image = PdfImage.fromFile(uploadPath + "//zryk//zryklogo//img//zryk.jpg");
  27. page.replaceImage(0, image);
  28. }
  29. //endregion
  30. //region 文字替换
  31. for (Object pageFonts : doc.getPages()) {
  32. PdfPageBase pageF = (PdfPageBase) pageFonts;
  33. //region 需要替换的文字信息
  34. String oldPhone = "xxxx-25689581";
  35. String newPhone = "xxxx-4523 2358";
  36. String oldPhone1 = "25569861";
  37. String newPhone1 = "55586662";
  38. PdfTextFindCollection collection = pageF.findText(oldPhone, false);
  39. PdfTextFindCollection collection1 = pageF.findText(oldPhone1, false);
  40. //endregion
  41. // 指定替换文本
  42. String newText = newPhone;
  43. String newText1 = newPhone1;
  44. //region 查找并替换文本1
  45. for (Object findObj : collection.getFinds()) {
  46. PdfTextFind find = (PdfTextFind) findObj;
  47. // 获取文本在页面中的范围
  48. Rectangle2D.Float rec = (Rectangle2D.Float) find.getBounds();
  49. // 写入空白范围遮住原来的文本
  50. pageF.getCanvas().drawRectangle(PdfBrushes.getWhite(), rec);
  51. PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f);// 创建字体
  52. pageF.getCanvas().drawString(newText, font, PdfBrushes.getBlack(), rec.getX(), rec.getY());
  53. }
  54. //endregion
  55. //region 查找并替换文本2
  56. for (Object findObj : collection1.getFinds()) {
  57. PdfTextFind find = (PdfTextFind) findObj;
  58. // 获取文本在页面中的范围
  59. Rectangle2D.Float rec = (Rectangle2D.Float) find.getBounds();
  60. // 写入空白范围遮住原来的文本
  61. pageF.getCanvas().drawRectangle(PdfBrushes.getWhite(), rec);
  62. PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f);// 创建字体
  63. pageF.getCanvas().drawString(newText1, font, PdfBrushes.getBlack(), rec.getX(), rec.getY());
  64. }
  65. //endregion
  66. }
  67. //endregion
  68. return AjaxResult.success("上传成功");
  69. }catch(Exception e){
  70. return AjaxResult.error("上传失败,请联系管理员",JSON.toJSON(e.getStackTrace()));
  71. }
  72. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/878408
推荐阅读
相关标签
  

闽ICP备14008679号