PDFbox-PDF解析(坐标定位,分页读取)

介绍

Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 使用此库,您可以开发用于创建,转换和操作PDF文档的Java程序。

PDFbox这个PDF处理类库,我使用过程中,能够满足我在一些场景中的需求,达成了我想要的效果,最后在此做一个使用demo的介绍,希望能够给大家带来帮助!
Apache-PDFbox
PDFvox-快速指南-WIKI

注意点

PDF内容是按坐标进行定位的;如果我们能够按照坐标及范围进行读取PDF,那将会更加的精准和高效;
关于如何获取PDF的坐标位置,请查阅如下文章👇
文章链接:如何获取PDF文件中对应内容的坐标及范围?

案例

创建项目

在这里插入图片描述
在这里插入图片描述

引入依赖

通过maven引入PDFbox依赖

   <dependencies>  
      <dependency> 
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>pdfbox</artifactId> 
         <version>2.0.1</version> 
      </dependency>   
      <dependency> 
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>fontbox</artifactId> 
         <version>2.0.0</version> 
      </dependency>
      <dependency>  
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>jempbox</artifactId> 
         <version>1.8.11</version> 
      </dependency> 
      <dependency>
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>xmpbox</artifactId> 
         <version>2.0.0</version> 
      </dependency> 
      <dependency> 
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>preflight</artifactId> 
         <version>2.0.0</version> 
      </dependency> 
      <dependency> 
         <groupId>org.apache.pdfbox</groupId> 
         <artifactId>pdfbox-tools</artifactId> 
         <version>2.0.0</version> 
      </dependency>
   </dependencies>

在这里插入图片描述
在这里插入图片描述

读取PDF文本内容

读取所有页,所有文本
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.File;
import java.io.IOException;

public class PDFReader {
    public static void main(String[] args) {
        try {
            File filePath = new File( "C:\\Users\\zhoujianwei\\Desktop\\PDFDemo\\Test.pdf");
            //加载PDF文件
            PDDocument document =  PDDocument.load(filePath);
            //文本剥离器
            PDFTextStripper stripper = new PDFTextStripper();
            //按位置进行排序
            stripper.setSortByPosition(true);
            //获取文本
            String text = stripper.getText(document);
            //关闭文档对象
            document.close();
            System.out.println(text);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

按页读取文本
 //按页进行读取,页码从1开始;关键代码
 stripper.setStartPage(1);
 stripper.setEndPage(1);
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.File;
import java.io.IOException;

public class PDFReader {
    public static void main(String[] args) {
        try {
            File filePath = new File( "C:\\Users\\zhoujianwei\\Desktop\\PDFDemo\\Test.pdf");
            //加载PDF文件
            PDDocument document =  PDDocument.load(filePath);
            //文本剥离器
            PDFTextStripper stripper = new PDFTextStripper();
            //按页进行读取,页码从1开始
            stripper.setStartPage(1);
            stripper.setEndPage(1);
            //按位置进行排序
            stripper.setSortByPosition(true);
            //获取文本
            String text = stripper.getText(document);
            //关闭文档对象
            document.close();
            System.out.println(text);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

按坐标读取
//普通的文本剥离器
PDFTextStripper stripper = new PDFTextStripper();
            //按区域读取文本剥离器
            PDFTextStripperByArea stripper = new PDFTextStripperByArea();
            //新建区域,坐标:x,y;宽高:width,height
            Rectangle rectangle = new Rectangle( 39, 39, 95,38);
            //设置区域
            stripper.addRegion("regionName",rectangle);
            //按位置进行排序
            stripper.setSortByPosition(true);
            //获取目录
            PDDocumentCatalog catalog = document.getDocumentCatalog();
            //获取页码树
            PDPageTree tree  = catalog.getPages();
            //获取指定页,从0开始
            PDPage page = tree.get(0);
            //提取页面信息
            stripper.extractRegions(page);
            //获取指定区域名称对应区域的文本
            String regionText = stripper.getTextForRegion( "regionName" );

区域坐标及范围测量;👇
文章链接:如何获取PDF文件中对应内容的坐标及范围?
在这里插入图片描述
完整代码

package org.demo;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;

import java.awt.*;
import java.io.File;
import java.io.IOException;

public class PDFReader {
    public static void main(String[] args) {
        try {
            File filePath = new File( "C:\\Users\\zhoujianwei\\Desktop\\PDFDemo\\Test.pdf");
            //加载PDF文件
            PDDocument document =  PDDocument.load(filePath);
            //按区域读取文本剥离器
            PDFTextStripperByArea stripper = new PDFTextStripperByArea();
            //新建区域,坐标:x,y;宽高:width,height
            Rectangle rectangle = new Rectangle( 39, 39, 95,38);
            //设置区域
            stripper.addRegion("regionName",rectangle);
            //按位置进行排序
            stripper.setSortByPosition(true);
            //获取目录
            PDDocumentCatalog catalog = document.getDocumentCatalog();
            //获取页码树
            PDPageTree tree  = catalog.getPages();
            //获取指定页,从0开始
            PDPage page = tree.get(0);
            //提取页面信息
            stripper.extractRegions(page);
            //获取指定区域名称对应区域的文本
            String regionText = stripper.getTextForRegion( "regionName" );
            System.out.println(regionText);
            //关闭文档对象
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jaywei.online

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值