目录

概述

开发环境

pom.xml 依赖

实例

1.全文解析

1.1 一次获取整个文件的内容

1.2 分页获取文字的内容

1.3 分页获取文字和图片

2.区域解析


概述

Apache PDFBox 是遵循Apache License v2.0的Java开源类库。用于操作PDF文档,可以创建新PDF文档,维护现有的PDF文档,或者从PDF文档中提取内容,支持生成加密的PDF文件,以及对PDF文件进行数字签名。Apache PDFBox同时提供了一个命令行操作工具。

Apache PDFBox 由pdfbox, fontbox 和xmpbox三个组件,在Maven groupId中都是 org.apache.pdfbox

注意:

  1. Pdfbox的PDPage对象从0开始计数。
  2. PDFTextStripper. setStartPage()、PDFTextStripper .setEndPage()从1开始计数。

开发环境

最小的需求:

  1. Java 6
  2. commons-logging

支持在PDF文档中嵌入式图像文件,但是对某些格式的支持需要第三方库,这些库是根据与apache2.0许可证不兼容的条款分发的

pom.xml 依赖

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <version>2.0.21</version>
</dependency>

实例

1.全文解析

当一个pdf中全是文字并且排列规整的时候,直接全文解析出来就好

1.1 一次获取整个文件的内容

import java.io.File;import java.io.IOException;import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.text.PDFTextStripper;public class preProcess {public static void main(String[] args) throws IOException {String rootDir=System.getProperty("user.dir")+File.separator;String fileResources=rootDir+"resources"+File.separator;String fileStr=fileResources+"123.pdf";File file=new File(fileStr);PDDocument doc=new PDDocument().load(file);PDFTextStripper textStripper =new PDFTextStripper();String s=textStripper.getText(doc);System.out.println("总页数:"+doc.getNumberOfPages());System.out.println("输出内容:");System.out.println(s);doc.close();}}import java.io.File;import java.io.IOException;import org.apache.pdfbox.io.RandomAccessFile;import org.apache.pdfbox.pdfparser.PDFParser;import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.text.PDFTextStripper;public class preProcess2 {public static void main(String[] args) throws IOException {String rootDir=System.getProperty("user.dir")+File.separator;String fileResources=rootDir+"resources"+File.separator;String fileStr=fileResources+"123.pdf";File file=new File(fileStr); RandomAccessFile is = new RandomAccessFile(file, "r"); PDFParser parser = new PDFParser(is);parser.parse();PDDocument doc = parser.getPDDocument(); PDFTextStripper textStripper =new PDFTextStripper();String s=textStripper.getText(doc);System.out.println("总页数:"+doc.getNumberOfPages());System.out.println("输出内容:");System.out.println(s);doc.close();}}

1.2 分页获取文字的内容

import java.io.File;import java.io.IOException;import org.apache.pdfbox.io.RandomAccessFile;import org.apache.pdfbox.pdfparser.PDFParser;import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.text.PDFTextStripper;public class preProcess3 {public static void main(String[] args) throws IOException {String rootDir=System.getProperty("user.dir")+File.separator;String fileResources=rootDir+"resources"+File.separator;String fileStr=fileResources+"fenye.pdf";File file=new File(fileStr); RandomAccessFile is = new RandomAccessFile(file, "r"); PDFParser parser = new PDFParser(is);parser.parse();PDDocument doc = parser.getPDDocument(); PDFTextStripper textStripper =new PDFTextStripper();for(int i=1;i<=doc.getNumberOfPages();i++){textStripper.setStartPage(i);textStripper.setEndPage(i);textStripper.setSortByPosition(true);//一次输出多个页时,按顺序输出String s=textStripper.getText(doc);System.out.println("当前页:"+i);System.out.println("输出内容:");System.out.println(s);}doc.close();}}

1.3 分页获取文字和图片

package com.zzj.nlp.PDFBox;import java.io.File;import java.io.IOException;import java.util.Iterator;import javax.imageio.ImageIO;import org.apache.pdfbox.cos.COSName;import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;import org.apache.pdfbox.text.PDFTextStripper;public class PDFBoxPreProcess2 {public static void main(String[] args) throws IOException {String rootDir=System.getProperty("user.dir")+File.separator;String fileResources=rootDir+"resources"+File.separator;String fileStr=fileResources+"fenye.pdf";File file=new File(fileStr); PDDocument doc = PDDocument.load(file); PDFTextStripper textStripper =new PDFTextStripper();for(int i=1;i<=doc.getNumberOfPages();i++){textStripper.setStartPage(i);textStripper.setEndPage(i);String s=textStripper.getText(doc);System.out.println("第 "+i+" 页 :"+s);//读取图片PDPage page=doc.getPage(i-1);PDResources resources = page.getResources();//获取页中的对象Iterable<COSName> xobjects =resources.getXObjectNames();if(xobjects!=null){Iterator<COSName> imageIter = xobjects.iterator(); while(imageIter.hasNext()){COSName cosName=imageIter.next();boolean isImageXObject=resources.isImageXObject(cosName);if(isImageXObject){//获取每页资源的图片PDImageXObject ixt=(PDImageXObject) resources.getXObject(cosName);File outputfile = new File("第 "+(i)+" 页"+cosName.getName()+".jpg");ImageIO.write(ixt.getImage(), "jpg", outputfile);}}  }}doc.close();}}

2.区域解析

当文字排列不规整或者是一些表格类型的pdf的时候,就需要分区域单独去解析pdf

import java.awt.Rectangle;import java.awt.geom.Rectangle2D;import java.io.File;import java.io.IOException;import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.text.PDFTextStripperByArea;public class PDFBoxPreProcess1 {public static void main(String[] args) throws IOException {String rootDir=System.getProperty("user.dir")+File.separator;String fileResources=rootDir+"resources"+File.separator;String fileStr=fileResources+"fenye.pdf";File file=new File(fileStr); PDDocument doc = PDDocument.load(file); 这个四边形所在区域在 y轴向下为正,x轴向右为正。int x =100;int y =-200;int width =1000;int height =1000;PDFTextStripperByArea stripper = new PDFTextStripperByArea();stripper.setSortByPosition(true);// 划定区域Rectangle2D rect = new Rectangle(x, y, width, height);stripper.addRegion("area", rect);PDPage page = doc.getPage(1);stripper.extractRegions(page);// 获取区域的textString data = stripper.getTextForRegion("area");data = data.trim();System.out.println(data);doc.close();}}

[pdfbox]pdfbox的使用相关推荐

  1. matlab使用pdfbox,PDFBox编写PDF文档

    本文概述 PDF文档是纸质文档的流行替代品.它们在每个平台上具有相同的外观.与纸质文档一样, 某些PDF文档是机密的.我们可以使用密码保护来保护PDF文档.我们还可以在PDF文档中指定权限和加密类型. ...

  2. Base64转PDF、PDF转IMG(使用pdfbox插件)

    --添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency> ...

  3. pdfbox 第一页加内容_Java使用PDFBox操作PDF文件获取页码、文章内容、缩略图

    一.依赖 com.sleepycat je 5.0.73 org.apache.pdfbox pdfbox 2.0.8 二.实现代码 import lombok.extern.slf4j.Slf4j; ...

  4. linux 中文乱码 转png_使用pdfBox实现pdf转图片,解决中文方块乱码等问题

    一.引入依赖 org.apache.pdfbox fontbox 2.0.13 org.apache.pdfbox pdfbox 2.0.13 二.PDF转PNG代码 String pdfBase64 ...

  5. pdfbox pdf转图片,图片长宽大小与pdf保持一致

    需求 需要将pdf转图片,用作预览,图片需要与pdf页的长宽大小保持一致. 依赖 org.apache.pdfbox:pdfbox:2.0.26 分析过程 pdfbox源码中,设置图片长宽大小的方法如 ...

  6. java pdfbox2 中文乱码_使用PdfBox实现pdf转图片,解决中文方块乱码等问题

    一.引入依赖 org.apache.pdfbox fontbox 2.0.13 org.apache.pdfbox pdfbox 2.0.13 二.PDF转PNG代码 String pdfBase64 ...

  7. java 使用Apache PDFBox 对 PDF 文件进行剪裁

    org.apache.pdfbox pdfbox 2.0.24

  8. java pdfbox 转jpg_java实现PDF转图片的方法

    本文实例为大家分享了java实现PDF转图片的具体代码,供大家参考,具体内容如下 1.首先利用maven引入所需jar包 org.apache.pdfbox fontbox 2.0.1 org.apa ...

  9. 使用Apache PDFBox实现拆分、合并PDF

    文章目录 使用Apache PDFBox实现拆分.合并PDF 问题背景 Apache PDFBox介绍 拆分PDF 合并PDF 拆分 + 合并 完整代码 参考: 使用Apache PDFBox实现拆分 ...

最新文章

  1. Symbols in Interllij IDEA
  2. C#使用ExecuteReader返回DataReader既有查询结果集又有输出参数或返回值的使用注意事项...
  3. 极验行为验证的使用方法
  4. linux c 时间函数 time difftime 简介
  5. 30. 多线程编程之threading模块
  6. Concrete Math 混凝土数学(具体数学)随笔
  7. String to Integer (atoi) leetcode java
  8. python class 是否存在某个变量_一文抵十课,考验你的Python变量是否理解透彻了
  9. 洛谷 1449——后缀表达式(线性数据结构)
  10. 修改strut默认的action后缀
  11. HttpModule 与 Globle.asax
  12. 如何获取瘦人肠道菌群_瘦人想要长胖,调节肠道菌群很重要
  13. 中兴Nubia Z5S mini一键ROOT教程 获取ROOT权限
  14. VMware虚拟机如何联网详解
  15. 无cmd窗口运行jar包的方法
  16. Java中对两个对象进行比较大小
  17. xutils获取数据
  18. 微信公众号开发:获取openId和用户信息(完整版)
  19. 计算机x线摄影的发展趋势,计算机X线摄影技术----CR 新进展
  20. 蓝懿ios技术交流和心得分享16.1.18

热门文章

  1. WAF---Web应用防火墙 功能梳理
  2. -Wl,-rpath的使用(不完全)
  3. 数学知识——余数之和
  4. 黑苹果hd630显存7m_CLOVER引导的黑苹果显存增加至2048MB并修复某些花屏
  5. 第三周作业3——Bug Report
  6. [安卓破解]正点工具箱,去除推荐软件和正点之星
  7. 知识图谱每日阅读(一)
  8. vsftp用户设置目录访问权限
  9. 高通平台开发工具大全, 百分之九十的工具都可以下载
  10. python入门篇1:组合数据类型