简介

Apache PDFBox库是一个用于处理PDF文档的开源Java工具。该项目允许创建新的PDF文档,操作现有PDF文档,并从PDF文档中提取内容。Apache PDFBox还包括几个命令行实用程序。

Apache PDFBox的主要功能如下:

  • 从PDF文件中提取Unicode文本。
  • 将单个PDF拆分成多个文件或合并多个PDF文件。
  • 从PDF表单中提取数据或填写PDF表单。
  • 验证PDF文件是否符合 PDF/A-1b 标准。
  • 使用标准的Java打印API打印PDF文件。
  • 将PDF另存为图像文件,例如PNG或JPEG。
  • 从头开始创建PDF,包括嵌入字体和图像。
  • 对PDF文件进行数字签名。

导入

首先,我们需要确保已经将PDFBox库添加到我的Java项目中。如果你使用的是maven,那么在pom.xml中添加如下依赖:

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

这里使用的版本是:2.0.28。

Talk is cheap. Show me the code.

创建PDF文档

我们可以使用以下代码创建一个简单的PDF文档:

import java.io.File;
import java.io.IOException;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.font.PDType1Font;public class CreatePDF {public static void main(String[] args) {PDDocument document = new PDDocument();PDPage page = new PDPage();document.addPage(page);PDType1Font font = PDType1Font.HELVETICA_BOLD;try {PDPageContentStream contentStream = new PDPageContentStream(document, page);contentStream.beginText();contentStream.setFont(font, 12);contentStream.newLineAtOffset(100, 700);contentStream.showText("Hello, World!");contentStream.endText();contentStream.close();document.save(new File("one-more.pdf"));document.close();System.out.println("PDF created successfully.");} catch (IOException e) {e.printStackTrace();}}
}

这个代码段创建一个新的PDF文档,并在其第一页上写入"Hello, World!"。我使用了Helvetica Bold字体,并将其大小设置为12。

接下来,我将文本显示在PDF页面上,并使用contentStream.close()方法关闭PDPageContentStream对象。

最后,我将文档保存为"one-more.pdf"文件,然后关闭PDDocument对象。效果如下图:

读取PDF文件

我们可以使用以下代码读取PDF文件中的全部内容:

import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;public class ReadPDFExample {public static void main(String[] args) {// 创建文件对象File file = new File("one-more.pdf");try {// 创建 PDF 文档对象PDDocument document = PDDocument.load(file);// 创建 PDF 文本剥离器PDFTextStripper stripper = new PDFTextStripper();// 获取 PDF 文件的全部内容String text = stripper.getText(document);// 输出 PDF 文件的全部内容System.out.println(text);// 关闭 PDF 文档对象document.close();} catch (IOException e) {e.printStackTrace();}}
}

首先,创建一个文件对象,然后使用 PDDocument 类的静态方法 load() 加载 PDF 文件并创建一个 PDF 文档对象。

然后,我们创建一个 PDFTextStripper 对象,并使用它的 getText() 方法获取 PDF 文件的全部内容。

最后,我们输出 PDF 文件的全部内容,并关闭 PDF 文档对象。

输出内容就是之前我们写入的:

Hello, World!

插入图片

我们可以使用以下代码在PDF文件中插入图片:

import java.io.File;
import java.io.IOException;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;public class InsertImageInPDF {public static void main(String[] args) {try {// 加载PDF文件PDDocument document = PDDocument.load(new File("one-more.pdf"));// 获取第一页PDPage page = document.getPage(0);// 加载图像文件PDImageXObject image = PDImageXObject.createFromFile("one-more.jpg", document);// 在指定位置插入图像PDPageContentStream contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, true, true);contentStream.drawImage(image, 200, 500, image.getWidth(), image.getHeight());// 关闭流contentStream.close();// 保存修改后的PDF文件document.save("one-more-jpg.pdf");// 关闭文档document.close();System.out.println("PDF created successfully.");} catch (IOException e) {e.printStackTrace();}}
}

在这个例子中,我们加载了一个名为“one-more.pdf”的PDF文件,获取了第一页,并加载了一个名为“one-more.jpg”的图像文件。

然后,我们使用drawImage()方法在PDF文档中的指定位置插入了图像。

最后,我们将修改后的文档保存到名为“one-more-jpg.pdf”的新文件中,并关闭文档。效果如下图:

读取图片

我们可以使用以下代码在PDF文件中读取图片:

import java.io.IOException;
import java.util.List;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;public class ReadPDFImagesExample {public static void main(String[] args) {try {// 加载PDF文件PDDocument document = PDDocument.load(new File("one-more-jpg.pdf"));PDPageTree pageTree = document.getPages();// 遍历每个页面for (PDPage page : pageTree) {int pageNum = pageTree.indexOf(page) + 1;int count = 1;System.out.println("Page " + pageNum + ":");for (COSName xObjectName : page.getResources().getXObjectNames()) {PDXObject pdxObject = page.getResources().getXObject(xObjectName);if (pdxObject instanceof PDImageXObject) {PDImageXObject image = (PDImageXObject) pdxObject;System.out.println("Found image with width "+ image.getWidth()+ "px and height "+ image.getHeight()+ "px.");String fileName = "one-more-" + pageNum + "-" + count + ".jpg";ImageIO.write(image.getImage(), "jpg", new File(fileName));count++;}}}document.close();} catch (IOException e) {e.printStackTrace();}}
}

在此示例中,我们使用PDDocument类从指定的PDF文件中加载文档,并遍历每个页面以查找其中的图像。

对于每个页面,我们获取其资源(包括图像)并检查其中是否存在图像。

如果存在,则我们遍历它们,并使用PDImageXObject对象获取它们的属性,例如宽度和高度。

然后,使用ImageIO把图片保存到本地文件系统。

输出如下:

Page 1:
Found image with width 150px and height 150px.

结尾

Apache PDFBox是一个功能强大的工具,除了以上的功能,还有许多其他功能值得我们去探索和发掘。如果你对Apache PDFBox有任何疑问或想了解更多功能,欢迎在评论区向我提问,或者直接访问官方网站:https://pdfbox.apache.org/。

使用 Apache PDFBox 操作PDF文件相关推荐

  1. PDFBox操作pdf文件转换为图片

    我是如何接触到PDFBox的 疫情期间,周末在家老实呆着,女友在学法律,但女友学习法律的pdf文件资料里每页都有一些类似培训机构联系方式的一些文字,共三四百页,用普通的编辑软件删除不了,如果要删除的话 ...

  2. Java使用PDFBox操作PDF文件

    1首先,导入jar (maven方式导入) PS: 这个jar里面囊括了所有的pdfbox操作工具类,导入这一个就够了 <dependency><groupId>org.apa ...

  3. Java使用PDFBOX操作pdf文件(一,加载和创建pdf)

    前言: 之前想学习使用Java操作pdf的时候看过了IText的文档.确实IText的文档很全,也有一个官网可以很方便的查找信息.但IText的开源协议为AGPL,使用者必须传染性的开源代码,商业使用 ...

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

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

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

    org.apache.pdfbox pdfbox 2.0.24

  6. Apache PDFBox 将嵌入文件添加到 PDF 文档

    本教程演示如何将嵌入文件添加到 PDF 文档. Maven 依赖项 我们使用 Apache Maven 来管理我们的项目依赖项.确保以下依赖项驻留在类路径中. <dependency>&l ...

  7. 【PDFBox】PDFBox操作PDF文档之添加本地图片、添加网络图片、图片宽高自适应、图片水平垂直居中对齐

    这篇文章,主要介绍PDFBox操作PDF文档之添加本地图片.添加网络图片.图片宽高自适应.图片水平垂直居中对齐. 目录 一.PDFBox操作图片 1.1.添加本地图片 (1)案例代码 (2)运行效果 ...

  8. 使用pdfbox将PDF文件一页拆分为两页

    使用pdfbox将PDF文件一页拆分为两页,自测是可以正常拆分的. 代码如下: import lombok.extern.slf4j.Slf4j; import org.apache.pdfbox.p ...

  9. 使用PDFbox加密pdf文件

    pdf 文件加密解密,并转换成byte[]类型传输 使用PDFbox加密pdf文件的方法 总结 参考链接 使用PDFbox加密pdf文件的方法 1.引入依赖 <!-- pdfBox加密 --&g ...

最新文章

  1. 从头开始写框架(一):浅谈JS模块化发展
  2. python 空对象模式_Python 单例模式(3种方式)
  3. 怎么用python处理excel文件-用python处理excel文件有多轻松?工作从未如此简单
  4. delphi 16 网页缩放
  5. pandas 数据分析常用技巧
  6. 天气情况图像分类练习赛 第三阶段(赛中感)
  7. fiddler发送post请求
  8. 6 volist双层数组_Javascript算法 — 数组排序
  9. java名人_识别名人 · Find the Celebrity
  10. 均方根误差有没有单位_mse均方误差是否有单位
  11. 微信小程序 editor富文本编辑器组件封装
  12. 高级语言c 与三菱plc通讯宝典,三菱PLCL系列串行通信模块用户手册基本篇中文高清版...
  13. 解决zabbix自动发现主机后主机名称是IP地址的问题
  14. 外卖CPS小程序外卖分销外卖推广系统外卖侠外卖探淘客源码
  15. CTF中遇到不知道文件类型_在营销界碰到网易,你永远不知道会遇到什么惊喜……...
  16. 如何用python编写财务记账软件_Python实现简单的记账本功能
  17. 记渣渣烟和专车司机的一次聊天
  18. MySQL面试:索引为啥使用B+树而不是B树
  19. 邂逅APP + 网站平台的产品设想
  20. Typora基础用法:pandoc安装,导入导出word文档,pdf文件。设置图片目录

热门文章

  1. Win7忘记密码解决
  2. IT新型态:十年一遇的变革
  3. 全栈搭建接口自动化之接口开发(四)
  4. Ableton Live 11 Suite:非常专业的音乐制作软件
  5. PHP做后端开发的朋友很稀少嘛?
  6. ​ES elasticsearch-analysis-dynamic-synonym​连接数据库动态更新synonym近义词
  7. mysql批量插入亿级别的数据
  8. Windows下Visual Studio无法引入Python.h文件
  9. 今天是我二十一岁的生日
  10. linux 777,755 等权限解释