因为功能需要在pdf文件上添加一个日期文本,找了好多资源,总算功夫不负有心人,总算让我找到一篇博客http://www.cnblogs.com/tankqiu/p/4339079.html?utm_source=tuicool,于是博主满心欢喜,马上去实践:

import java.io.IOException;
import com.itextpdf.awt.geom.Rectangle2D.Float;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.ImageRenderInfo;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.RenderListener;
import com.itextpdf.text.pdf.parser.TextRenderInfo;
public class Demo
{
// 定义关键字
private static String KEY_WORD = "KEYWORD";
// 定义返回值
private static float[] resu = null;
// 定义返回页码
private static int i = 0;
/*
* 返回关键字所在的坐标和页数 float[0] >> X float[1] >> Y float[2] >> page
*/
private float[] getKeyWords(String filePath)
{
try
{
PdfReader pdfReader = new PdfReader(filePath);
int pageNum = pdfReader.getNumberOfPages();
PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(
pdfReader);
// 下标从1开始
for (i = 1; i < pageNum; i++)
{
pdfReaderContentParser.processContent(i, new RenderListener()
{
@Override
public void renderText(TextRenderInfo textRenderInfo)
{
String text = textRenderInfo.getText();
if (null != text && text.contains(KEY_WORD))
{
Float boundingRectange = textRenderInfo
.getBaseline().getBoundingRectange();
resu = new float[3];
resu[0] = boundingRectange.x;
resu[1] = boundingRectange.y;
resu[2] = i;
}
}
@Override
public void renderImage(ImageRenderInfo arg0)
{
// TODO Auto-generated method stub
}
@Override
public void endTextBlock()
{
// TODO Auto-generated method stub
}
@Override
public void beginTextBlock()
{
// TODO Auto-generated method stub
}
});
}
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return resu;
}
}

实际运行时,发现如何都定位不到我想要定位的地方,然后我又去这个博客翻了翻,结果在评论下方找到了答案:

果然,不能一味的抄袭和引用。无奈,我又去恶补了一下itxt,发现TextRenderInfo每次读取的不一定是一个字,有时候可能是一个词,也有可能是一行。原来,TextRenderInfo每次读取到的都是chunk(文本块)里的内容!好吧,既然问题找到了,那就解决问题,于是经过我的不懈改造,代码变成了下面这个样子:

package com.example.web.utils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.util.StringUtils;
import com.itextpdf.awt.geom.Rectangle2D.Float;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.ImageRenderInfo;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.RenderListener;
import com.itextpdf.text.pdf.parser.TextRenderInfo;
public class PDFUtils{
// 定义关键词
private static String KEY_WORD = "日期:";
// 定义返回值
private static float[] resu = null;
// 定义返回页码
private static int i = 0;
//定义关键字数组
private static String[] WORD = null;
//定义关键字数组长度
private static int index = 0;
//返回结果
private static ListresultList = Collections.synchronizedList(new ArrayList());
/*
* 返回关键字所在的坐标和页数 float[0] >> X float[1] >> Y float[2] >> page
*/
private ListgetKeyWords(String filePath, String keyWord){
if(!StringUtils.isEmpty(keyWord)){
KEY_WORD = keyWord;
}
try{
PdfReader pdfReader = new PdfReader(filePath);
int pageNum = pdfReader.getNumberOfPages();
PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(
pdfReader);
// 下标从1开始
for (i = 1; i <= pageNum; i++){
WORD = KEY_WORD.split("");
index = WORD.length;
pdfReaderContentParser.processContent(i, new RenderListener(){
boolean f = false; //是否寻找到与之匹配的的头文字
int p = 1;
@Override
public void renderText(TextRenderInfo textRenderInfo){
String text = textRenderInfo.getText();
//doc转PDF
//原理:textRenderInfo只能读取到一个字符,而我们要匹配的关键词往往是多个字符,所以分析后设计匹配关键词方法如下,
//先匹配关键词的第一个字符
if (null != text && text.contains(WORD[p]) && text.length()==1)
{
//匹配到关键字第一个字符,可以进行关键字完整匹配流程
if(p==1){
f = true;
}
String str = WORD[p];
if(pt = ut.getKeyWords("d:/test.pdf","日期");
for (float[] fs : t) {
System.out.println("X>>" + fs[0] + "Y>>" +fs[1]+ "Page>>" + fs[2]);
}
}
}

经过测试,成功打印出结果:

X>>466.0Y>>10.0Page>>0.0
第一次写博客,有很多描述不全的地方,大家如果有什么不明白的地方,尽管在下方留言,我看到后会一一回复。

PDF定位关键字/词所在坐标及页码相关推荐

  1. ITEXT-定位PDF中图片的坐标与页码

    问题场景: 用itext自动生成PDF的过程中,想要在PDF中的某一页加入水印,这个水印图片的页码不固定,所以不能直接用'sealStamperUnder = stamp.getUnderConten ...

  2. pdf插入图片到指定坐标位置 亲测可用

    pdf插入图片到指定位置,常见图片格式都支持 坐标位置可自定义 根据文字.关键字识别坐标位置,可见另一个帖子:pdf识别关键字坐标 依赖引用:itextpdf-5.5.13.jar 常见itextpd ...

  3. 百度地图SDK无法定位到当前所在位置;一直显示天安门

    按照百度官方SDK接入百度地图SDK后,进行地图定位的时候,缩小界面,显示出了定位图标,但是打开地图界面,一直显示天安门的位置. /*** 初始化定位内容*/private void initLoca ...

  4. matlab经纬度转换行列号,如何在栅格中定位一个点所在的行列号(将十进制经纬度转换成行列号)...

    如何在栅格中定位一个点所在的行列号 摘要 第一种方法:利用点要素类的属性表的字段计算器(推荐使用) 第二种方法:利用空间分析的方法(太复杂,不建议使用) 原文链接: http://support.es ...

  5. pdf python定位_如何使用PyPDF2获取PDF定位

    我正在使用Python/Django. PyPDF2阅读我目前的pdf. 如何使用PyPDF2获取PDF定位 我想阅读我已经保存的pdf文件,并获得pdf内单页的方向. 我期望能够确定页面是横向还是纵 ...

  6. php找出函数定义位置,WordPress如何快速定位PHP函数所在文件位置及代码行号?

    有时候我们需要修改别人源码里的代码,却找不到对应的函数放在了哪儿,就可以用使用本文介绍的办法,帮你快速定位函数位置.特别是某些写法不规范的WordPress主题,各种模块,函数到处放,找半天的那种.那 ...

  7. 三星s6如何打开位置服务器,三星手机如何定位对方手机所在位置(如何知道对方手机位置)...

    三星手机如何定位对方手机所在位置(如何知道对方手机位置) 想要通过百思特网手机A获取手机B的位置信息,首先需要为手机B绑定云账号,并开启"查找手机"功能,然后再通过手机A登录云账号 ...

  8. 让金山词霸在 Adobe Reader XI 的 PDF 中取词

    电脑重装后,安装了最新版本的 Adobe Reader XI 和 金山词霸 2012.打开 pdf 文件后开启金山词霸取词,突然屏幕上弹出一个词霸窗口,可能是提醒关于 Adobe Reader 取词的 ...

  9. 关于windows程序显示鼠标所在坐标

    最近在学习windows程序设计,当遇到需要显示鼠标所在坐标时,因为教材都是讲vc6.0的,而在自己的vs上总出现问题. 总体思路时将坐标转换成字符串,再将字符串用TextOutW()输出. 其中一个 ...

最新文章

  1. 使用scanf()函数接收带空格的字符串
  2. LeetCode - Search a 2D Matrix
  3. LINUX服务器出网带宽 一直被占用原因查找
  4. undertale人物_「undertale」传说之下精美人物图包 (SansGaster篇)
  5. 1.C#WinForm基础制作简单计算器
  6. 北京金融局、通州区政府与蚂蚁金服战略合作 共防系统性金融风
  7. ubuntu16.04 安装Opencv 3.1.0 import cv2 报错ImportError: No module named hdf5
  8. Flexbox 布局教程
  9. 利用Scrapy爬取拉勾网某职位信息
  10. Ubuntu - Firefox 视频无法播放问题解决方法
  11. VisualStudio2017编写masm32汇编程序以及语法高亮配置
  12. 视频下载转换器:MovieSherlock for Mac
  13. 机器人定位误差标定模型
  14. leetcode LCP 03. 机器人大冒险 -java
  15. LINUX 下C实现线程池《转载》
  16. 有没有计算机网课,有没有电脑录制视频工具可以录制网课?
  17. 苹果开放降级_为什么不开放 iOS 降级验证通道?
  18. win10 vs2015 wxWidgets编译
  19. 目标检测中多尺度:特征金字塔FPN_Feature Pyramid Networks for Object Detection
  20. 随着我国经济的持续快速发展,城市轻物流需求大幅增长

热门文章

  1. 观察DNF的伤害计算公式
  2. 人类动作识别数据集AVA
  3. Centos7下mysql安装详解
  4. php 判断是什么服务器,php判断服务器是apache还是nginx的方法
  5. Higher-order organization of complex networks 之邻接矩阵的构建思路
  6. getevent 获取报点
  7. 【逆向】《0day安全-软件漏洞分析技术》实验笔记2
  8. 【PCIe 6.0】PCIe Flit 打包解包规则
  9. 一个测试菜鸟如何成长为测试开发专家
  10. aoa定位算法matlab仿真,基于信号到达角度(AOA)的定位算法研究