【定位:PDF文件定位关键字所在坐标和页码】

iText简介:

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。

iText使用版本:5.5.4

方法简介:根据关键字keyword定位出keyword所在页和具体坐标,在keyword所在位置处可以插入图片文字==

 1 import java.io.IOException;
 2 import com.itextpdf.awt.geom.Rectangle2D.Float;
 3 import com.itextpdf.text.pdf.PdfReader;
 4 import com.itextpdf.text.pdf.parser.ImageRenderInfo;
 5 import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
 6 import com.itextpdf.text.pdf.parser.RenderListener;
 7 import com.itextpdf.text.pdf.parser.TextRenderInfo;
 8 
 9 public class Demo
10 {
11     // 定义关键字
12     private static String KEY_WORD = "KEYWORD";
13     // 定义返回值
14     private static float[] resu = null;
15     // 定义返回页码
16     private static int i = 0;
17 
18     /*
19      * 返回关键字所在的坐标和页数 float[0] >> X float[1] >> Y float[2] >> page
20      */
21     private float[] getKeyWords(String filePath)
22     {
23         try
24         {
25             PdfReader pdfReader = new PdfReader(filePath);
26             int pageNum = pdfReader.getNumberOfPages();
27             PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(
28                     pdfReader);
29 
30             // 下标从1开始
31             for (i = 1; i < pageNum; i++)
32             {
33                 pdfReaderContentParser.processContent(i, new RenderListener()
34                 {
35 
36                     @Override
37                     public void renderText(TextRenderInfo textRenderInfo)
38                     {
39                         String text = textRenderInfo.getText();
40                         if (null != text && text.contains(KEY_WORD))
41                         {
42                             Float boundingRectange = textRenderInfo
43                                     .getBaseline().getBoundingRectange();
44                             resu = new float[3];
45                             resu[0] = boundingRectange.x;
46                             resu[1] = boundingRectange.y;
47                             resu[2] = i;
48                         }
49                     }
50 
51                     @Override
52                     public void renderImage(ImageRenderInfo arg0)
53                     {
54                         // TODO Auto-generated method stub
55 
56                     }
57 
58                     @Override
59                     public void endTextBlock()
60                     {
61                         // TODO Auto-generated method stub
62 
63                     }
64 
65                     @Override
66                     public void beginTextBlock()
67                     {
68                         // TODO Auto-generated method stub
69 
70                     }
71                 });
72             }
73         } catch (IOException e)
74         {
75             // TODO Auto-generated catch block
76             e.printStackTrace();
77         }
78         return resu;
79     }
80 
81 }
原文地址:https://www.cnblogs.com/tankqiu/p/4339079.html