pdfbox简明教程
来源:互联网 发布:嵌入式linux教学视频 编辑:程序博客网 时间:2024/06/18 15:05
pdfbox简明教程
1.概述
1.1.简介
Apache PDFbox是一个开源的、基于Java的、支持PDF文档生成的工具库,它可以用于创建新的PDF文档,修改现有的PDF文档,还可以从PDF文档中提取所需的内容。常用的PDF操作的java类库还有itext,功能比PDFbox还要强大,尤其是中文的支持做的比较好,但itext是收费的。
1.2.功能
Apache PDFBox主要有以下特征:
1)文本提取:从PDF文档中提取文本。
2)合并&分割:可以把多个PDF文档合并成单个,也可以把单个PDF分拆成多个PDF文档。
3)表单填充:可以从PDF表单中提取数据,或者是填充PDF表单。
4)PDF/A验证:验证PDF文档是否满足PDF/A ISO标准。
5)PDF打印:把PDF文档输出到打印机——利用了Java的打印API。
6)PDF转换:可以把PDF文档转换成映像文件。
7)PDF创建:可以从头创建新的PDF文档。
8)集成Lucene搜索引擎:Lucene搜索引擎与PDF索引相集成。
2.1.常用API
PDDocument:表示PDF文档在内存中的形式。
PDPage:表示内存中PDF文档的页码对象,可由pDDocument.getPage(index)得到。
PDPageContentStream:输出流,往PDF文档中写内容的流。
PDFTextStripper:文本内容提取器类,用于从PDF文档中提取text的API。
PDFRenderer:PDF渲染器类,可以将PDF转换成图片缓存。
3.1.常见功能示例
以下是从官方示例中整理出的一些常用功能代码封装成的方法,加了一些注释。
依赖
~~~xml
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>xmpbox</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.10.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency></dependencies>
~~~
1.创建pdf文档
~~~java
/**
* TODO 创建PDF文档,写入内容,并且保存到指定路径下
* @param content 文本内容
* @param filePath 保存路径
*/
public void savePdf(String content , String filePath) throws IOException {
//新建一个PDF文档到内存中 PDDocument doc = new PDDocument(); //新建一个PDF页,相当于文档中的一页 PDPage page = new PDPage(); //添加到文档中 doc.addPage(page); //PDFont是pdfbox中的字体管理类,PDType1Font是字体库,HELVETICA_BOLD是字体类型,为该PDF文档设置字体 PDFont font = PDType1Font.HELVETICA_BOLD; //创建往PDF中写内容的输出流 PDPageContentStream pdStream = new PDPageContentStream(doc , page); //初始化流,开始写入 pdStream.beginText(); //设置字体类型,字体大小 pdStream.setFont(font , 12); //设置当前页大小 pdStream.newLineAtOffset(100,700); //将文本内容写入PDF pdStream.showText(content); //写入结束 pdStream.endText(); pdStream.close(); //将PDF文档保存到指定路径 doc.save(filePath); //关闭PDDocument doc.close();}
~~~
2.将图片转换为PDF
~~~java
/**
* TODO 保存图片为pdf文档
* @param imagePath 图片路径
* @param pdfPath PDF文档路径
*/
public void saveImageToPdf(String imagePath, String pdfPath) throws IOException {
//还是初始化PDF文档与pdf页
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
//创建读取图片的输入流,指定图片所在路径与要保存到的PDF文档 PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath , doc); //初始化写入PDF文档的输出流 PDPageContentStream pdStream = new PDPageContentStream(doc , page); //将图片写入pdf文档,指定显示大小 float scale = 1f; pdStream.drawImage(pdImage , 100 , 100); pdStream.close(); //保存写好的PDF doc.save(pdfPath); doc.close();}
~~~
3.将图片添加到已有PDF文档中
~~~java
/**
* TODO 将图片读取到已经存在的PDF文档中
* @param pdfPath pdf文档的路径
* @param imagePath 图片路径
* @param newPdfPath 保存了图片之后的新PDF文档的保存路径
* @throws IOException
*/
public void addImageToPdf(String pdfPath , String imagePath , String newPdfPath) throws IOException {
//将本地pdf文档加载到内存中,生成PDDocument对象
PDDocument doc = PDDocument.load(new File(pdfPath));
//准备将图片保存在PDF中的第一页
PDPage page = doc.getPage(0);
//将图片读取到PDF文档中 PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath , doc); /** * 准备输出流,将准备写出的pdf文档与页码pdPage指定好 * PDPageContentStream.AppendMode.APPEND 在源文档基础上追加内容的模式 * compress:是否接受图片压缩 * resetContext:是否重置上下文 */ PDPageContentStream pdStream = new PDPageContentStream(doc , page , PDPageContentStream.AppendMode.APPEND , true, false); /** * 将图片读取到输出流中,并将图片以0.3比例压缩 */ float scale = 0.3f; pdStream.drawImage(pdImage , 20 , 20 , pdImage.getWidth()*scale , pdImage.getHeight()*scale); pdStream.close(); doc.save(newPdfPath); doc.close();}
~~~
4.从PDF文档中提取text内容
~~~java
/**
* TODO 提取PDF文档中的text内容
* @param pdfPath 要提取PDF文档的路径
* @throws IOException
*/
public String extractTextFromPdf(String pdfPath) throws IOException {
//加载本地的PDF文档到内存中
PDDocument doc = PDDocument.load(new File(pdfPath));
//创建PDF文本内容提取器对象PDFTextStripper
PDFTextStripper stripper = new PDFTextStripper();
//提取内存文档中的text内容
String textRes = stripper.getText(doc);
//可以用输出流打印,也还有其他的提取方式,可以自行查阅
doc.close(); return textRes;}
~~~
5.指定区域获取PDF文本内容
~java
/**
* TODO 指定区域获取PDF文本内容
* @param pdfPath 本地PDF文档内容
* @return 获取到的text内容
* @throws IOException
*/
public String extractTextByArea(String pdfPath) throws IOException {
PDDocument doc = PDDocument.load(new File(pdfPath));
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition(true);
Rectangle rect = new Rectangle(0 , 0 , 275 , 60);
stripper.addRegion("reg",rect);
PDPage page = doc.getPage(0);
stripper.extractRegions(page);
System.out.println(rect);
return null;
}
~
5.将PDF文档转换为图片
~java
/**
* TODO 将PDF文档转换为图片
* @param pdfPath 本地PDF文档的路径
* @param page 要保存PDF文档的页码
* @param imgPath 要保存目标图片的路径
* @throws IOException
*/
public void savePdfToImage(String pdfPath , Integer page , String imgPath) throws IOException {
PDDocument doc = PDDocument.load(new File(pdfPath));
//PDF文档的提取器,包含将PDF文档提取为图片缓冲流(BufferedImage)的方法
PDFRenderer renderer = new PDFRenderer(doc);
//图片比例
int scale = 4;
//将PDF文档提取为图片缓存流,并且指定是第几页
BufferedImage bufImage = renderer.renderImage(page , scale);
//将流中数据写出为图片
ImageIO.write(bufImage , "png" , new File(imgPath));
}
~
这里只整理了一部分常用功能,还有其他的需求可以参考官方示例,写的比较好。
- pdfbox简明教程
- PDFBox
- pdfbox
- SQL教程简明教程
- 简明批处理教程
- 简明批处理教程
- 简明批处理教程
- 简明批处理教程(.bat)
- PySqlite简明教程
- Forth语言简明教程
- XML简明教程
- PySqlite简明教程 (转)
- XSL简明教程
- Visual Unit 简明教程
- Perl 简明教程
- MYSQL简明教程
- 简明 Python 教程
- XML 简明教程
- 炸弹人2
- 使用history.length判断是否有上一页面,如果没有就返回到指定页面
- Django学习06---Model模型(数据库)
- python requests库安装
- java selenium环境搭建
- pdfbox简明教程
- Hdu 6185 Covering【递推+矩阵快速幂】
- hive-hadoop 常用命令
- 【qt】QT中打开文件不识别中文路径的解决办法
- shiro中 realm中方法何时被调用
- SylixOS热插拔子系统分析(二)
- Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名
- Linux 磁盘管理命令
- 1054. 求平均值 (20)