Java 操作pdf工具类

news2024/9/28 23:32:56

1、获取pdf页数

添加maven依赖:

        <!-- java获取Pdf文件页码 -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>1.8.11</version>
        </dependency>

代码实现:

	/** 
	 * 获取pdf页数
	 * @author lgn
	 * @date 2023/6/13 10:29
	 * @return int
	 */
	public static int getFilePage(String pdfName) throws IOException {
		int page=0;

		//pdfName:pdf文件路径
		try {
			PDDocument pdDocument = PDDocument.load(pdfName);
			page=pdDocument.getNumberOfPages();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return page;
	}

	public static void main(String[] args) throws Exception {
/*		System.out.println("begin");
		PDFReport ppt = new PDFReport();
		String url = ppt.testWritePdf();
		System.out.println(url);
		System.out.println("end");*/

		String url="C:\\Users\\Administrator\\Desktop\\新建 DOC 文档.pdf";
		System.out.println(getFilePage(url));

	}

2、获取pdf文字内容

maven依赖:

        <!-- java 识别pdf -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.23</version>
        </dependency>

接口实现:

    /**
     * 获取pdf文字内容
     */
    @PostMapping("uploadPDF")
    public R<SysFile> uploadPDF(MultipartFile multipartFile) {
        try
        {
            //multipartFile为multipartFile文件类型,将文件转化为文件流被PDDocument加载
            PDDocument document = PDDocument.load(multipartFile.getInputStream());
            document.getClass();
            //使用PDFTextStripper 工具
            PDFTextStripper tStripper = new PDFTextStripper();
            //设置文本排序,有规则输出
            tStripper.setSortByPosition(true);
            //获取所有文字信息
            String info = tStripper.getText(document);

            System.out.println(info);
            return R.ok();
        }
        catch (Exception e)
        {
            log.error("上传文件失败", e);
            return R.fail(e.getMessage());
        }
    }

3、Java 提取 PDF 文件中的图片

引入maven依赖:

在这里插入图片描述

        <dependency>
            <groupId>e-iceblue</groupId>
            <artifactId>spire.pdf.free</artifactId>
            <version>3.9.0</version>
        </dependency>

    <repositories>
        <repository>
        <id>com.e-iceblue</id>
        <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>

代码实现:

package com.ypk.swagger.utils.PDFUtils;

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 * 从 PDF 文档中提取图片
 * @author lgn
 * @date 2023/6/21 16:37
 */
public class PdfboxUtil {

    public static void main(String[] args) throws IOException {
        //创建 PdfDocument 类的对象
        PdfDocument doc = new PdfDocument();
        //载入PDF文档
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\SY P-EM-02 A4 设备管理控制程序-.pdf");

        //声明一个int变量
        int index = 0;

        //循环遍历所有页面
        for (PdfPageBase page : (Iterable<PdfPageBase>) doc.getPages()) {
            //从页面中提取图片
            for (BufferedImage image : page.extractImages()) {

                //指定文件路径和文件名
                File output = new File("C:\\Users\\Administrator\\Desktop\\" + String.format("图片-%d.png", index++));

                //将图片保存为PNG文件
                ImageIO.write(image, "PNG", output);
            }
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Goby 漏洞发布|电信网关配置管理系统后台 /manager/teletext/material/upload.php 文件上传漏洞

漏洞名称&#xff1a;电信网关配置管理系统后台 /manager/teletext/material/upload.php 文件上传漏洞 English Name&#xff1a;Telecom system /manager/teletext/material/upload.php fileupload vulnerability CVSS core: 9.8 影响资产数&#xff1a;856 漏洞描述&…

不过时的经典层架构

在《设计服务要考虑的7个维度》中讲到设计一定要把不稳定的部分做封装。今天咱们就从这个角度重新审视一下经典的四层架构。 上面是一个经典层架构的示意图。这个架构大多数的公司和项目都在直接用&#xff0c;或者用其变体。 比如&#xff0c;某大厂上层Client客户端可能是电商…

安卓蓝牙GATT协议介绍

前言 现在低功耗蓝牙&#xff08;BLE&#xff09;连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范&#xff0c;这些很短的数据段被称为属性&#xff08;Attribute&#xff09;。 GAP 详细介绍 GAT…

GBASE金融信创优秀解决方案鉴赏 · 核心业务系统数据库解决方案

为此&#xff0c;实验室特别开设金融信创优秀解决方案专栏&#xff0c;集中展示优秀成果。现在&#xff0c;让我们一起来领略下GBASE的优秀解决方案吧~可点击阅读原文 →《金融信创优秀解决方案--核心业务系统数据库解决方案》。 核心业务系统数据库解决方案 方案简介 随着技…

Android Qcom USB Driver学习(十三)

该系列文章总目录链接与各部分简介&#xff1a; Android Qcom USB Driver学习(零) Android Qcom USB Driver学习(八) Android Qcom USB Driver学习(九) UCSI USB Type-C Connector System Software Interface Specification DPM Device Policy Manager deals with the USB P…

智安网络|驾驭数字化转型时代:加速业务转型的战略

随着科技的飞速发展和数字化时代的到来&#xff0c;企业面临着前所未有的机遇和挑战。数字化正在改变着商业的方方面面&#xff0c;而那些能够及时适应和把握这些变化的企业将脱颖而出。因此&#xff0c;加速企业转型成为了当务之急。 一、为什么需要加速企业转型 1.全球市场竞…

D. Pairs of Segments(最大不相交区间数量)

Problem - D - Codeforces 给定一个由n个线段组成的数组[[l1,r1],[l2,r2],…,[ln,rn]]&#xff0c;其中每个线段用左右端点表示。如果存在至少一个x满足l1≤x≤r1且l2≤x≤r2&#xff0c;则称线段[l1,r1]和[l2,r2]相交。 如果k为偶数&#xff0c;并且可以将该数组的元素分成k/…

VTK裁剪【3】-vtkClipPolyDatavtkPolyPlane问题

前言&#xff1a;本博文主要记录vtkClipPolyData中采用vtkPolyPlane作为裁剪工具时的出现的问题&#xff0c;供各位小伙伴进行参考&#xff0c;避免踩坑&#xff01; 目录 vtkPolyPlane介绍及作用 vtkClipPolyData原理 实现流程&#xff1a; 问题所在&#xff1a; 需求&…

css绘制网格背景

文章目录 前言效果图说明 前言 本篇文章主要简单扼要的去实现css网格背景&#xff0c;并进一步探求其应用原理 效果图 css代码 body::before, body::after {position: fixed;top: 0;left: 0;right: 0;bottom: 0;content: ;background-repeat: repeat;pointer-events: none;o…

企业特权密码管理

随着企业中特权帐户的激增&#xff0c;必须保护的密码数量也大幅增长。跟踪所有这些密码是一项艰巨的任务&#xff0c;为避免敏感密码管理不善&#xff0c;管理员需要在集中式存储库下清点属于所有部门的密码&#xff0c;并管理对它们的直接控制。 部署PMP的好处 PMP是一个安…

Baumer工业相机堡盟工业相机如何使用新版本NEOAPI SDK控制相机数据流的开启和关闭(C#)

Baumer工业相机堡盟工业相机如何使用新版本NEOAPI SDK控制相机数据流的开启和关闭&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机NEOAPI SDK的技术背景Baumer工业相机使用NEOAPISDK控制相机数据流的方式1.引用合适的类文件2.使用NEOAPISDK控制相机数据流的方式2.使用…

市场模式下光伏用户群的电能共享与需求响应模型(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《市场模式下光伏用户群的电能共享与需求响应模型》&#xff0c;为了使光伏用户群内各经济主体能实现有序的电能交易&#xff0c;提出了一种基于光伏电能供需比&#xff08;SDR&#xff09;的内…

JavaScript实现伪随机正态分布

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是正态分布&am…

Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具&#xff0c;可以去 github 下载最新版&#xff1a;https://github.com/allure-framework/allure2/releases 如果你想学习Pytest自动化测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全…

图扑智慧地下采矿,“像素游戏”智能呈现

在这个像素世界里&#xff0c;我们需要一个智能地下采矿可视化综合管理平台&#xff0c;来帮助我们管理和监控地下采矿全流程。 图扑软件依托自主研发的 HT for Web 产品&#xff0c;结合三维定制化渲染、动态模拟、物理碰撞、5G、物联网、云计算及大数据等先进技术&#xff0c…

vue+leaflet笔记之热力图

vueleaflet笔记之热力图 文章目录 vueleaflet笔记之热力图开发环境代码简介插件简介与安装使用简介 详细源码(Vue3) 本文介绍了Web端使用 Leaflet开发库展示热力图方法 (底图来源:天地图)&#xff0c;结合leaflet.heat插件可以很容易的做出热力图&#xff0c;通过调整其配置参…

旧系统重构遇到的种种问题

首先我将原来springboot版本升级到2.7.9&#xff0c;spring的docker分层和启动受到了影响&#xff0c;这个在docker镜像大小问题已经讲过&#xff0c;不再赘述&#xff0c;因为维护的人变成为一个人&#xff0c;因此我需要将各代码的版本进行统一&#xff0c;方便维护。 5 sun.…

数据治理(数据模型,数据规范,数据安全,数据成本,元数据,数据质量等)

数据治理是什么?为什么要做数据治理?关于数据治理我们需要做什么? 数据治理无论是在数仓建设过程中还是数仓建设完成之后都是及其重要的,是数据部门基础建设的必经之路,是降本提效,形成企业数据资产的关键一环 一 数据质量管理 1.1 数据质量基本概念 ●数据质量管理(Dat…

【Java-SpringBoot+Vue+MySql】Day3.1-SpringBoot Web开发

目录 前期回顾——SpringBoot与Maven 一、web入门 1、知识点密集区 &#xff08;1&#xff09;spring web依赖 &#xff08;2&#xff09;控制器 ​ (3)路由映射 &#xff08;4&#xff09;URL映射 &#xff08;5&#xff09;Method匹配​编辑 &#xff08;6&#xff09…

一种基于FPGA的雷达综合显示模块技术方案

一、项目整 这是我们做过的一个项目&#xff0c;若有需求&#xff0c;请联系我。开放PCB和软件技术。 以FPGA为核心&#xff0c;开发设计具有多路图像/视频采集、处理、传输、显示等功能的嵌入式视频模块。可对多路SerDes接口输入的高速串行视频流数据进行解析&#xff0c;将…