java通过pdf-box插件完成对pdf文件中图片/文字的替换
需要引入的Maven依赖:
<!-- pdf替换图片 -->
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf.free</artifactId>
<version>5.1.0</version>
</dependency>
java代码:
public AjaxResult replacepdf(MultipartFile file) {
try {
//初始化 PdfDocument 类的实例
PdfDocument doc = new PdfDocument();
PdfDocument doc1 = null;
int fileType = 0;
doc.loadFromStream(file.getInputStream());
//加载 PDF 文档
//region 单页模板替换
if (doc.getPages().getCount() <= 1) {
//获取所需的页面
PdfPageBase page = doc.getPages().get(0);
//region 获取原图大小 位置
PdfImageInfo[] imagesInfo = page.getImagesInfo();
//获取指定图片的坐标
Rectangle2D bounds = imagesInfo[imagesInfo.length - 1].getBounds();
double x = bounds.getX();
double y = bounds.getY();
double width = bounds.getWidth();
double height = bounds.getHeight();
//endregion
//替换公章
PdfImage image2 = PdfImage.fromFile(uploadPath + "//zryk//zrykseal//img//zrykseal.jpg");
page.deleteImage(imagesInfo.length - 1);
page.getCanvas().drawImage(image2, x + 40, y, 87, 87);
PdfImage image = PdfImage.fromFile(uploadPath + "//zryk//zryklogo//img//zryk.jpg");
page.replaceImage(0, image);
}
//endregion
//region 文字替换
for (Object pageFonts : doc.getPages()) {
PdfPageBase pageF = (PdfPageBase) pageFonts;
//region 需要替换的文字信息
String oldPhone = "xxxx-25689581";
String newPhone = "xxxx-4523 2358";
String oldPhone1 = "25569861";
String newPhone1 = "55586662";
PdfTextFindCollection collection = pageF.findText(oldPhone, false);
PdfTextFindCollection collection1 = pageF.findText(oldPhone1, false);
//endregion
// 指定替换文本
String newText = newPhone;
String newText1 = newPhone1;
//region 查找并替换文本1
for (Object findObj : collection.getFinds()) {
PdfTextFind find = (PdfTextFind) findObj;
// 获取文本在页面中的范围
Rectangle2D.Float rec = (Rectangle2D.Float) find.getBounds();
// 写入空白范围遮住原来的文本
pageF.getCanvas().drawRectangle(PdfBrushes.getWhite(), rec);
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f);// 创建字体
pageF.getCanvas().drawString(newText, font, PdfBrushes.getBlack(), rec.getX(), rec.getY());
}
//endregion
//region 查找并替换文本2
for (Object findObj : collection1.getFinds()) {
PdfTextFind find = (PdfTextFind) findObj;
// 获取文本在页面中的范围
Rectangle2D.Float rec = (Rectangle2D.Float) find.getBounds();
// 写入空白范围遮住原来的文本
pageF.getCanvas().drawRectangle(PdfBrushes.getWhite(), rec);
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f);// 创建字体
pageF.getCanvas().drawString(newText1, font, PdfBrushes.getBlack(), rec.getX(), rec.getY());
}
//endregion
}
//endregion
return AjaxResult.success("上传成功");
}catch(Exception e){
return AjaxResult.error("上传失败,请联系管理员",JSON.toJSON(e.getStackTrace()));
}
}
原文地址:https://blog.csdn.net/aaa58962458/article/details/140524684
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!