java实现pdf根据内容定位插入图片
1.导入jar包
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.12</version>
<type>pom</type>
</dependency>
2.实现类
package test;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfDocumentContentParser;
import com.itextpdf.kernel.pdf.canvas.parser.listener.IPdfTextLocation;
import com.itextpdf.kernel.pdf.canvas.parser.listener.RegexBasedLocationExtractionStrategy;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import java.util.Collection;
public class Test {
public static void main(String[] args) throws Exception {
String input = "D:\\te1.pdf";
getKeyWordsLocation(input, "甲方:", 1);
}
public static void getKeyWordsLocation(String input, String KEY_WORD, int pageNum) {
RegexBasedLocationExtractionStrategy strategy = new RegexBasedLocationExtractionStrategy(KEY_WORD);
try {
ImageData imageData = ImageDataFactory.create("D:\\1.jpg");
PdfReader pr = new PdfReader(input);
PdfDocument pd = new PdfDocument(pr, new PdfWriter("D:\\test.pdf"));
Document document = new Document(pd);
PdfDocumentContentParser pdcp = new PdfDocumentContentParser(pd);
RegexBasedLocationExtractionStrategy regexStrategy = pdcp.processContent(pageNum, strategy);
Collection<IPdfTextLocation> resultantLocations = strategy.getResultantLocations();
if (!resultantLocations.isEmpty()) {
for (IPdfTextLocation item : resultantLocations) {
Rectangle boundRectangle = item.getRectangle();
System.out.println(item.getText());
System.out.println("关键字“" + KEY_WORD + "” 的坐标为 x: " + boundRectangle.getX() + " ,y: " + boundRectangle.getY());
Image image = new Image(imageData).scaleAbsolute(70, 20).setFixedPosition(pageNum, boundRectangle.getRight() + 5f, boundRectangle.getBottom());
document.add(image);
}
document.close();
} else {
System.out.println("结果为空");
}
pr.close();
pd.close();
} catch (Exception e) {
System.err.println("读取文件失败!");
e.printStackTrace();
}
}
}
3.实现效果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/18c0a6172e205dbc2f4dd90defe8fec6.png)