PDF解析入门案例

  • 介绍
  • 注意点
  • 案例
  • 创建项目
  • 引入依赖
  • 读取PDF文本内容
  • 读取所有页,所有文本
  • 按页读取文本
  • 按坐标读取


介绍

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

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

注意点

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

案例

创建项目

pdf 关键字定位坐标偏差 pdf坐标获取软件_java


pdf 关键字定位坐标偏差 pdf坐标获取软件_PDF解析_02

引入依赖

通过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 关键字定位坐标偏差 pdf坐标获取软件_PDFbox_03


pdf 关键字定位坐标偏差 pdf坐标获取软件_pdf 关键字定位坐标偏差_04

读取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();
        }
    }
}

pdf 关键字定位坐标偏差 pdf坐标获取软件_java_05

按页读取文本
//按页进行读取,页码从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();
        }
    }
}

pdf 关键字定位坐标偏差 pdf坐标获取软件_PDFbox_06

按坐标读取
//普通的文本剥离器
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文件中对应内容的坐标及范围?

pdf 关键字定位坐标偏差 pdf坐标获取软件_pdf 关键字定位坐标偏差_07


完整代码

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();
        }
    }
}

运行结果

pdf 关键字定位坐标偏差 pdf坐标获取软件_pdf 关键字定位坐标偏差_08