【定位: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 }