织梦网站栏目设计,南京做网站的网络公司排名,西安网站建设制作熊掌号,顺德品牌网站建设信息由于工作需要#xff0c;要从pdf文件中提取出图片保存到本地#xff0c;项目中就引用到了Apache PDFBox库。
1 什么是Apache PDFBox? Apache PDFBox库#xff0c;一个用于处理PDF文档的开源Java工具。它允许用户创建全新的PDF文件#xff0c;操作现有的PDF文档#xff0… 由于工作需要要从pdf文件中提取出图片保存到本地项目中就引用到了Apache PDFBox库。
1 什么是Apache PDFBox? Apache PDFBox库一个用于处理PDF文档的开源Java工具。它允许用户创建全新的PDF文件操作现有的PDF文档以及从PDF文件中提取内容等。 1.1 Apache PDFBox的主要功能
Extract Text从PDF文件中提取Unicode文本。Split Merge将单个PDF拆分成多个文件或将多个PDF文件合并为一个文件。Fill Forms从PDF表单中提取数据或填写PDF表单。Preflight根据PDF/A-1b标准验证PDF文件。Print使用标准Java打印API打印PDF文件。Save as Image将pdf文件保存为图像文件如PNG或JPEG。Create PDFs从头开始创建新的PDF文件包含嵌入字体和图像。Signing对PDF文件进行数字签名。
1.2 Apache PDFBox的组件 1.3 Apache PDFBox相关依赖
PDFBox版本JDK最低版本Maven版本PDFBox4.0.0-SNAPSHOTJDK 11Maven 3PDFBox 3.0.xJDK 8 (目前测试进行到Java 19)Maven 3PDFBox 2.0.xJDK 7Maven 3
2 从pdf中提取图片代码实现
2.1 SpringBoot工程引入依赖
该SpringBoot项目使用Java8。
dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.21/version
/dependencydependencygroupIdorg.apache.pdfbox/groupIdartifactIdpdfbox/artifactIdversion2.0.29/version
/dependency2.2 测试代码
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;public class PdfGetJpg {public static void main(String[] args) {// 创建文件对象File file new File(C:\\test.pdf);export(file);}private static void export(File file) {String fileName file.getName().substring(0, file.getName().indexOf(.));PDDocument document null;try {//解析PDF并加载document PDDocument.load(file);//获取索引为0的页面也就是获取第一页PDPage page document.getPage(0); // 可以通过获取页数进行循环每一页//获取页面所需的任何资源的字典PDResources resources page.getResources();//返回XObject资源的名称IterableCOSName cosNames resources.getXObjectNames();if(cosNames ! null) {IteratorCOSName cosNameIterator cosNames.iterator();while (cosNameIterator.hasNext()) {COSName cosName cosNameIterator.next();//判断给定名称的XObject资源是否为图像if(resources.isImageXObject(cosName)) {PDImageXObject pdImage (PDImageXObject) resources.getXObject(cosName);BufferedImage image pdImage.getImage();try(FileOutputStream fileOutputStream new FileOutputStream(file.getParentFile().getAbsolutePath() File.separator fileName .jpg)) {//输出图片到指定位置ImageIO.write(image, jpg, fileOutputStream);fileOutputStream.flush();} catch (IOException e) {System.out.println(输出文件失败 fileName e.getMessage());}}}}} catch (IOException e) {System.out.println(提取失败 fileName);} finally {try {document.close();} catch (IOException e) {e.printStackTrace();}}}}PDFBox的其他操作具体可查看API文档 感谢你看到了现在最后别忘了点个赞哦