[pdfbox]pdfbox的使用
目录
概述
开发环境
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
注意:
- Pdfbox的PDPage对象从0开始计数。
- PDFTextStripper. setStartPage()、PDFTextStripper .setEndPage()从1开始计数。
开发环境
最小的需求:
- Java 6
- 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的使用相关推荐
- matlab使用pdfbox,PDFBox编写PDF文档
本文概述 PDF文档是纸质文档的流行替代品.它们在每个平台上具有相同的外观.与纸质文档一样, 某些PDF文档是机密的.我们可以使用密码保护来保护PDF文档.我们还可以在PDF文档中指定权限和加密类型. ...
- Base64转PDF、PDF转IMG(使用pdfbox插件)
--添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency> ...
- pdfbox 第一页加内容_Java使用PDFBox操作PDF文件获取页码、文章内容、缩略图
一.依赖 com.sleepycat je 5.0.73 org.apache.pdfbox pdfbox 2.0.8 二.实现代码 import lombok.extern.slf4j.Slf4j; ...
- linux 中文乱码 转png_使用pdfBox实现pdf转图片,解决中文方块乱码等问题
一.引入依赖 org.apache.pdfbox fontbox 2.0.13 org.apache.pdfbox pdfbox 2.0.13 二.PDF转PNG代码 String pdfBase64 ...
- pdfbox pdf转图片,图片长宽大小与pdf保持一致
需求 需要将pdf转图片,用作预览,图片需要与pdf页的长宽大小保持一致. 依赖 org.apache.pdfbox:pdfbox:2.0.26 分析过程 pdfbox源码中,设置图片长宽大小的方法如 ...
- java pdfbox2 中文乱码_使用PdfBox实现pdf转图片,解决中文方块乱码等问题
一.引入依赖 org.apache.pdfbox fontbox 2.0.13 org.apache.pdfbox pdfbox 2.0.13 二.PDF转PNG代码 String pdfBase64 ...
- java 使用Apache PDFBox 对 PDF 文件进行剪裁
org.apache.pdfbox pdfbox 2.0.24
- java pdfbox 转jpg_java实现PDF转图片的方法
本文实例为大家分享了java实现PDF转图片的具体代码,供大家参考,具体内容如下 1.首先利用maven引入所需jar包 org.apache.pdfbox fontbox 2.0.1 org.apa ...
- 使用Apache PDFBox实现拆分、合并PDF
文章目录 使用Apache PDFBox实现拆分.合并PDF 问题背景 Apache PDFBox介绍 拆分PDF 合并PDF 拆分 + 合并 完整代码 参考: 使用Apache PDFBox实现拆分 ...
最新文章
- Symbols in Interllij IDEA
- C#使用ExecuteReader返回DataReader既有查询结果集又有输出参数或返回值的使用注意事项...
- 极验行为验证的使用方法
- linux c 时间函数 time difftime 简介
- 30. 多线程编程之threading模块
- Concrete Math 混凝土数学(具体数学)随笔
- String to Integer (atoi) leetcode java
- python class 是否存在某个变量_一文抵十课,考验你的Python变量是否理解透彻了
- 洛谷 1449——后缀表达式(线性数据结构)
- 修改strut默认的action后缀
- HttpModule 与 Globle.asax
- 如何获取瘦人肠道菌群_瘦人想要长胖,调节肠道菌群很重要
- 中兴Nubia Z5S mini一键ROOT教程 获取ROOT权限
- VMware虚拟机如何联网详解
- 无cmd窗口运行jar包的方法
- Java中对两个对象进行比较大小
- xutils获取数据
- 微信公众号开发:获取openId和用户信息(完整版)
- 计算机x线摄影的发展趋势,计算机X线摄影技术----CR 新进展
- 蓝懿ios技术交流和心得分享16.1.18