关于使用itexpdf7提取pdf页面指定区域内容文本
参考文章和资料
老梁 - https://cloud.tencent.com/developer/article/1502408
微光•无单位 - https://blog.youkuaiyun.com/LvWeijie941/article/details/105248627/
官方api - https://api.itextpdf.com/iText7/java/7.0.5/
前言
具体版本为itexpdf7.0.4,使用Maven项目管理依赖
主要使用jar包: kernel-7.0.4.jar
转载请注明出处
配置
具体Maven配置可参考先前文章
依赖
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.0.4</version>
</dependency>
</dependencies>
程序代码
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.kernel.pdf.canvas.parser.filter.TextRegionEventFilter;
import com.itextpdf.kernel.pdf.canvas.parser.listener.FilteredTextEventListener;
import com.itextpdf.kernel.pdf.canvas.parser.listener.ITextExtractionStrategy;
import com.itextpdf.kernel.pdf.canvas.parser.listener.LocationTextExtractionStrategy;
public class test {
public static void main(String args[]){
String inputFileName = "target.pdf";
int x = 120;
int y = 415;
int width = 500-120;
int height = 510 - 415;
Rectangle region = new Rectangle(x, y, width, height);
//通过传入待处理pdf文件和感兴趣的区域以及指定页数进行 页面区域内容提取
getRectangleExtraction(inputFileName, region, 46);
}
public static void getRectangleExtraction(String input, Rectangle region, int pageNum){
//新建区域过滤器
TextRegionEventFilter filter = new TextRegionEventFilter(region);
StringBuilder result = new StringBuilder();
try{
PdfReader pr = new PdfReader(input);
PdfDocument pd = new PdfDocument(pr);
//给 文本过滤监听器 装配 文本提取策略 和 所需过滤器 后返回具体的策略
ITextExtractionStrategy strategy = new FilteredTextEventListener(new LocationTextExtractionStrategy(), filter);
//核心思想为:给待处理pdf页面以相应的策略进行处理.
//借助PdfTextExtractor类,本质仍然使用PdfCanvasProcessor类处理
result.append(PdfTextExtractor.getTextFromPage(pd.getPage(pageNum), strategy));
//直接输出结果
System.out.println("the extracted region result: \r" + result);
}catch (Exception e){
System.err.println("No such file!");
e.printStackTrace();
}
}
}