class TestRenderListener implements RenderListener {//用来存放文字的矩形List<Rectangle2D.Float> rectText = new ArrayList<Rectangle2D.Float>();//用来存放文字List<String> textList = new ArrayList<String>();//用来存放文字的y坐标List<Float> listY = new ArrayList<Float>();//用来存放每一行文字的坐标位置List<Map<String, Rectangle2D.Float>> rows_text_rect = new ArrayList<>();//PDF文件的路径protected String filepath = null;public TestRenderListener() {}//step 2,遇到"BT"执行@Overridepublic void beginTextBlock() {// TODO Auto-generated method stub}//step 3/*** 文字主要处理方法*/@Overridepublic void renderText(TextRenderInfo renderInfo) {//获取文字的下面的矩形//Rectangle2D.Float rectBase = renderInfo.getBaseline().getBoundingRectange();String text = renderInfo.getText();if (text.length() > 0) {RectangularShape rectBase = renderInfo.getBaseline().getBoundingRectange();//获取文字下面的矩形Rectangle2D.Float rectAscen = renderInfo.getAscentLine().getBoundingRectange();//计算出文字的边框矩形float leftX = (float) rectBase.getMinX();float leftY = (float) rectBase.getMinY() - 1;float rightX = (float) rectAscen.getMaxX();float rightY = (float) rectAscen.getMaxY()   1;Rectangle2D.Float rect = new Rectangle2D.Float(leftX, leftY, rightX - leftX, rightY - leftY);//                System.out.println("text:"   text   "--x:"   rect.x   "--y:"   rect.y   "--width:"   rect.width   "--height:"   rect.height);if (listY.contains(rect.y)) {int index = listY.indexOf(rect.y);float tempx = rect.x > rectText.get(index).x ? rectText.get(index).x : rect.x;rectText.set(index, new Rectangle2D.Float(tempx, rect.y, rect.width   rectText.get(index).width, rect.height));textList.set(index, textList.get(index)   text);} else {rectText.add(rect);textList.add(text);listY.add(rect.y);}Map<String, Rectangle2D.Float> map = new HashMap<>();map.put(text, rect);rows_text_rect.add(map);}}//step 4(最后执行的,只执行一次),遇到“ET”执行@Overridepublic void endTextBlock() {// TODO Auto-generated method stub}//step 1(图片处理方法)@Overridepublic void renderImage(ImageRenderInfo renderInfo) {}}
        try {PdfReader reader = new PdfReader(pdfPath);//新建一个PDF解析对象PdfReaderContentParser parser = new PdfReaderContentParser(reader);//包含了PDF页面的信息,作为处理的对象PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("E:/pdftest/test2.pdf"));//获取pdf的页数PdfContentByte page = stamper.getOverContent(1);for (int i = 1; i <= reader.getNumberOfPages(); i  ) {//新建一个ImageRenderListener对象,该对象实现了RenderListener接口,作为处理PDF的主要类TestRenderListener listener = new TestRenderListener();//解析PDF,并处理里面的文字parser.processContent(i, listener);//获取文字的矩形边框List<Rectangle2D.Float> rectText = listener.rectText;List<String> textList = listener.textList;List<Float> listY = listener.listY;List<Map<String, Rectangle2D.Float>> list_text = listener.rows_text_rect;Map<String, Position> map1 = new HashMap<>();for (int k = 0; k < list_text.size(); k  ) {Map<String, Rectangle2D.Float> map = list_text.get(k);for (Map.Entry<String, Rectangle2D.Float> entry : map.entrySet()) {System.out.println(entry.getKey()   "----"   entry.getValue());}}}System.out.println(JSON.toJSON(positionMap));} catch (Exception ex) {ex.printStackTrace();}

itextPDF操作PDF,获取PDF内容相关推荐

  1. java解析pdf获取pdf中内容信息

    java解析pdf获取pdf中内容信息 今日项目中需要将pdf中的数据获取到进行校验数据,于是前往百度翻来覆去找到以下几种办法,做个笔记,方便日后查询. 废话不多说,我要直接上代码装逼了 第一种 使用 ...

  2. c语言文件操作获取文件位置,C语言文件操作:获取文件内容

    在 C Premier Plus 中看到一个文本处理程序,写的非常精妙,分析一下: #include #include // 要求在命令行中运行程序,并附带文件名作为参数 int main(int a ...

  3. 通过itextpdf操作PDF,动态向PDF文件最后一页添加图片

    通过itextpdf操作PDF,向PDF文件最后一页添加图片(缩放图片并判断最后一页是否能放下图片) 本人第一篇博客,哈哈!第一次接触itextpdf,想实现将图片向PDF尾部追加(判断原页面使用情况 ...

  4. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  5. java获取pdf的页数、内容和缩略图

    1.导入maven依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfb ...

  6. 用pdfbox获取pdf内容及座标

    1.引入maven依赖 <dependency>              <groupId>org.apache.pdfbox</groupId>         ...

  7. php使用FPDI获取PDF内容、合并PDF文件、导入模板

    使用FPDI获取PDF内容的方式 FPDI内部使用了StreamReader类,它使用低级函数,如fread()或ftell()来与流交互. 流读取器类提供了通过特定输入类型创建实例的静态方法.它的构 ...

  8. 如何获取PDF文件中对应内容的坐标及范围?

    如何获取PDF文件中对应内容的坐标及范围? 介绍 安装地址 使用方式 打开软件 开启坐标显示 坐标显示单位切换 开启网格辅助线 测量工具使用 介绍 这款来至Adobe公司旗下的PDF阅读器: 它免费提 ...

  9. java解析pdf格式文件获取文本内容

    思路:先将pdf按照页数分割成图片,在将分割的图片做图片识别,提取文字,最后将提取到的文字解析或者保存到txt文件. 图片识别我使用的是百度开发者中心提供的 图片识别接口,我在上一篇文章中有详细说明, ...

最新文章

  1. 基于Transformer对透明物体进行分割
  2. java项目的逻辑结构
  3. LeetCode Same Tree
  4. GitLab怎样实现新建仓库并允许开发者推送代码实现协同开发
  5. 在VS2010调试javascript程序时的各种问题
  6. 可视化太酷辽!一文了解排序和搜索算法在前端中的应用
  7. c语言程序源代码_程序的编译、链接和执行
  8. 今天的在一旁看电视的蜡笔小新
  9. 推荐一个牛逼的生物信息 Python 库 - Dash Bio
  10. rabbitMQ linux 安装步骤
  11. iOS:ODRefreshControl
  12. 杭电多校HDU 6601 Keen On Everything But Triangle(主席树)题解
  13. 从托管映像创建 VM
  14. php学生信息管理系统(源码)
  15. 通达信标记符号_通达信符号大全
  16. 轻松熊喵喵个人笔记 -- java学习路线记录
  17. pandas时间序列——时间基础、时间增量、时间周期、日期偏移处理
  18. ios:苹果手机直接安装ipa文件
  19. 2021年十佳优惠券返利APP排名榜 2021年用户喜欢的优惠券返利APP前10排行榜
  20. 学习mysql_day2

热门文章

  1. yjp在jboss上的on-demand attach
  2. 去噪自动编码器(DAE)
  3. Java偏向锁与轻量级锁
  4. 九针串口跟电脑主板接法
  5. 一个高质量的智能单元测试平台——iUnit
  6. BUUCTF qwb2018_opm
  7. huge形式_big的最高级形式
  8. 小程序中如何正确使用换行符‘\n‘
  9. 百度关键词分析工具_百度网站关键词快排系统 - 网站被降权的原因分析
  10. Matlab MEX