使用itextpdf来操作PDF文件,定位PDF文件中的关键字坐标演示
测试结果:
测试的PDF文件如下:
junit测试输出坐标:
maven配置中引入itextpdf:
<!--引入pdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency>
定位工具类PdfHelper.java:
packagecom.alphajuns.util; importcom.itextpdf.text.pdf.PdfReader; importcom.itextpdf.text.pdf.parser.PdfReaderContentParser; importjava.io.IOException; /*** @ClassName PdfHelper * @Description Pdf帮助类 * @Author AlphaJunS * @Date 2020/3/7 17:40 * @Version 1.0 */ public classPdfHelper { /*** @Author AlphaJunS * @Date 18:24 2020/3/7 * @Description 用于供外部类调用获取关键字所在PDF文件坐标 * @paramfilepath * @paramkeyWords * @returnfloat[] */ public static float[] getKeyWordsByPath(String filepath, String keyWords) { float[] coordinate = null; try{ PdfReader pdfReader = newPdfReader(filepath); coordinate =getKeyWords(pdfReader, keyWords); } catch(IOException e) { e.printStackTrace(); } returncoordinate; } /*** @Author AlphaJunS * @Date 18:26 2020/3/7 * @Description 获取关键字所在PDF坐标 * @parampdfReader * @paramkeyWords * @returnfloat[] */ private static float[] getKeyWords(PdfReader pdfReader, String keyWords) { float[] coordinate = null; int page = 0; try{ int pageNum =pdfReader.getNumberOfPages(); PdfReaderContentParser pdfReaderContentParser = newPdfReaderContentParser(pdfReader); CustomRenderListener renderListener = newCustomRenderListener(); renderListener.setKeyWord(keyWords); for (page = 1; page <= pageNum; page++) { renderListener.setPage(page); pdfReaderContentParser.processContent(page, renderListener); coordinate =renderListener.getPcoordinate(); if (coordinate != null) break; } } catch(IOException e) { e.printStackTrace(); } returncoordinate; } }
pdf帮助类CustomRenderListener.java:
packagecom.alphajuns.util; importcom.itextpdf.awt.geom.Rectangle2D.Float; importcom.itextpdf.text.pdf.parser.ImageRenderInfo; importcom.itextpdf.text.pdf.parser.RenderListener; importcom.itextpdf.text.pdf.parser.TextRenderInfo; /*** @Author AlphaJunS * @Date 12:53 2020/3/7 * @Description pdf签名帮助类 */ public class CustomRenderListener implementsRenderListener{ private float[] pcoordinate = null; privateString keyWord; private intpage; public intgetPage() { returnpage; } public void setPage(intpage) { this.page =page; } public float[] getPcoordinate(){ returnpcoordinate; } publicString getKeyWord() { returnkeyWord; } public voidsetKeyWord(String keyWord) { this.keyWord =keyWord; } @Override public voidbeginTextBlock() {} @Override public voidendTextBlock() {} @Override public voidrenderImage(ImageRenderInfo arg0) {} @Override public voidrenderText(TextRenderInfo textRenderInfo) { String text =textRenderInfo.getText(); if (null != text &&text.contains(keyWord)) { Float boundingRectange =textRenderInfo.getBaseline().getBoundingRectange(); pcoordinate = new float[3]; pcoordinate[0] =boundingRectange.x; pcoordinate[1] =boundingRectange.y; pcoordinate[2] =page; } } }