当前位置: 首页 > news >正文

上传及接收pdf文件,使用pdfbox读取pdf文件内容

前端上传pdf文件

html

<form class="layui-form"><div style="background-color: #ffffff" ><div style="padding: 30px"><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label"><label style="color: red">*</label>编号:</label><div class="layui-input-inline"><input type="text" class="layui-input" name="orderNo" id="orderNo" ></div></div></div><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label "><label style="color: red">*</label>上传文件:</label><div class="layui-inline layui-input-inline"><input type="file" name="printFile" id="printFile"></div></div></div><div class="layui-form-item"><div class="layui-input-block"><button type="button" class="layui-btn layui-btn-sm" id="save-button" onclick="save()">提交</button></div></div></div></div>
</form>

js

function save(){var formData = new FormData();formData.appen("orderNo",$("#orderNo").val())var files = document.getElementById('printFile');if(files.files && files.files.length > 1){formData.append('file',files.files[0])}else{layer.msg("文件不能为空");return false;}formData.append('file',files.files[0])console.log("formData",formData)var url = ""HSoft.postMultipartForm(url), formData,function(res){console.log(res)if ("200" == res.code) {layer.msg(res.data);setTimeout(function(){layer.closeAll('loading');},1000)} else {layer.msg("提交失败",res.msg);}});
}this.postMultipartForm = function(url,formData,fn,errorCallback){$.ajax({type: "POST",url: url,data: formData,/***必须false才会自动加上正确的Content-Type*/contentType: false,/*** 必须false才会避开jQuery对 formdata 的默认处理* XMLHttpRequest会对 formdata 进行正确的处理*/processData: false,error: function (XHR, textStatus, errorThrown) {console.log("XHR=" + XHR + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);if (errorCallback && typeof errorCallback == "function") {errorCallback({});}},success: function (data, textStatus) {if (fn && typeof fn == "function") {fn(data);}}});
};

后台接收文件

安装pdfbox依赖

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

controller

@PostMapping("/uploadFile")
@ApiOperation("上传文件")
@ResponseBody
public CommonResult<String> uploadFile(@RequestParam("file") MultipartFile file, HttpServletRequest request){DataRespVO respVO = orderService.uploadFile(file,request);if(Objects.equals(respVO.getCode(), 200)){return CommonResult.success(respVO.getMessage());}return CommonResult.error(respVO.getCode(), respVO.getMessage());
}

service

@Override
public DataRespVO uploadFile(MultipartFile file, HttpServletRequest request) {MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);String orderNo = params.getParameter("orderNo ");if(HSoft.isEmpty(orderNo )){return new DataRespVO(ErrorCodeConstants.ORDER_NO_IS_EMPTY);}PDDocument document = null;try{// 读取标签文件内容String fileName = file.getOriginalFilename();document = PDDocument.load(file.getInputStream());int pageSize = document.getNumberOfPages();String text = "";// 一页一页读取for (int i = 0; i < pageSize; i++) {// 文本内容PDFTextStripper stripper = new PDFTextStripper();// 设置按顺序输出stripper.setSortByPosition(true);stripper.setStartPage(i + 1);stripper.setEndPage(i + 1);text = stripper.getText(document);System.out.println(text.trim());}}catch (Exception e){log.error(e.getMessage(),e);return new DataRespVO((new ErrorCode(10000001,"数据更新失败,"+e.getMessage())));} finally {try {if (document != null) {document.close();}} catch (IOException e) {log.error(e.getMessage(),e);return new DataRespVO((new ErrorCode(10000001,"数据更新失败,"+e.getMessage())));}}return new DataRespVO(ErrorCodeConstants.UPDATE_OK);
}

相关文章:

上传及接收pdf文件,使用pdfbox读取pdf文件内容

前端上传pdf文件 html <form class"layui-form"><div style"background-color: #ffffff" ><div style"padding: 30px"><div class"layui-form-item"><div class"layui-inline"><label c…...

第一个搭建SpringBoot项目(连接mysql)

首先新建项目找到Spring Initializr 我使用的URL是https://start.spring.io这里最低的JDK版本是17&#xff0c;而且当网速不好的时候可能会显示超时&#xff0c;这里可以选用阿里云的镜像https://start.aliyun.com可以更快一些但是里面还是有一些区别的 我们这里选择Java语言&a…...

docker部署rabbitMQ 单机版

获取rabbit镜像&#xff1a;我们选择带有“mangement”的版本&#xff08;包含web管理页面&#xff09;&#xff1b; docker pull rabbitmq:management 创建并运行容器&#xff1a; docker run -d --name rabbitmq -p 5677:5672 -p 15677:15672 rabbitmq:management --name:…...

PDF 全文多语言 AI 摘要 API 数据接口

PDF 全文多语言 AI 摘要 API 数据接口 PDF / 文本摘要 AI 生成 PDF 文档摘要 AI 处理 / 智能摘要。 1. 产品功能 支持多语言摘要生成&#xff1b;支持 formdata 格式 PDF 文件流传参&#xff1b;快速处理大文件&#xff1b;基于 AI 模型&#xff0c;持续迭代优化&#xff1b;…...

《信息系统安全》课程实验指导

第1关&#xff1a;实验一&#xff1a;古典密码算法---代换技术 任务描述 本关任务&#xff1a;了解古典密码体制技术中的代换技术&#xff0c;并编程实现代换密码的加解密功能。 注意所有明文字符为26个小写字母&#xff0c;也就是说字母表为26个小写字母。 相关知识 为了完…...

Accelerated Soft Error Testing 介绍

加速软错误测试(Accelerated Soft Error Testing, ASET)是一种评估半导体器件或集成电路(ICs)在高辐射环境中发生软错误率(Soft Error Rate, SER)的方法。这种测试方法通过模拟或加速软错误的发生,以便在较短时间内评估器件的可靠性。软错误指的是那些不会对硬件本身造成…...

Redis缓存常用的读写策略

缓存常用的读写策略 缓存与DB的数据不一致问题&#xff0c;大多数都是指DB的数据已经修改&#xff0c;而缓存中的数据还是旧数据的情况。 旁路缓存模式 对于读操作&#xff1a;基本上所有模式都是先尝试从缓存中读&#xff0c;没有的话再去DB读取&#xff0c;然后写到缓存中…...

9月产品更新 | 超10项功能升级,快来看看你的需求上线了吗?

Smartbi用户可以在官网&#xff08;PC端下载&#xff09;&#xff0c;更新后便可以使用相关功能&#xff0c;也可以在官网体验中心体验相关功能。 接下来&#xff0c;我们一起来看看都有哪些亮点功能更新吧。 ▎插件商城 Smartbi麦粉社区的应用市场新增了“插件”模块&#xf…...

ARP协议工作原理析解 (详细抓包分析过程)

目录 1. ARP 协议 2. 工作原理 3. ARP 协议报文格式 4. ARP 缓存的查看和修改 5. tcpdump 抓包分析 ARP 协议工作原理 5.1 搭建 2 台虚拟机 5.2 在主机 192.168.0.155 打开一个shell命令行开启抓包监听 5.3 在主机 192.168.0.155 打开另一个shell命令行 telnet 192.168.…...

axure动态面板

最近转管理岗了&#xff0c;作为项目负责人&#xff0c;需要常常与客户交流沟通&#xff0c;这时候画原型的能力就是不可或缺的本领之一了&#xff0c;关于axure可能很多it行业者都不是很陌生&#xff0c;简单的功能呢大家就自行去摸索&#xff0c;我们这次从动态面板开始讲起。…...

[论文笔记]Making Large Language Models A Better Foundation For Dense Retrieval

引言 今天带来北京智源研究院(BAAI)团队带来的一篇关于如何微调LLM变成密集检索器的论文笔记——Making Large Language Models A Better Foundation For Dense Retrieval。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们&quo…...

Linux平台屏幕|摄像头采集并实现RTMP推送两种技术方案探究

技术背景 随着国产化操作系统的推进&#xff0c;市场对国产化操作系统下的生态构建&#xff0c;需求越来越迫切&#xff0c;特别是音视频这块&#xff0c;今天我们讨论的是如何在linux平台实现屏幕|摄像头采集&#xff0c;并推送至RTMP服务。 我们知道&#xff0c;Linux平台&…...

梧桐数据库|中秋节活动·抽奖领取大闸蟹

有话说 众所周不知&#xff0c;我的工作就是做一个国产的数据库产品—中国移动梧桐数据库&#xff08;简称WuTongDB&#xff09;。 近期我们举办了一次小活动&#xff0c;来提升梧桐数据库的搜索量和知名度&#xff0c;欢迎大家来参加&#xff0c;免费抽奖领取大闸蟹哦~~~ 具…...

Python怎么发送邮件:基础步骤与详细教程?

Python怎么发送邮件带附件&#xff1f;怎么使用Python发送邮件&#xff1f; 无论是工作中的通知、报告&#xff0c;还是生活中的问候、邀请&#xff0c;电子邮件都扮演着不可或缺的角色。那么&#xff0c;Python怎么发送邮件呢&#xff1f;AokSend将详细介绍Python发送邮件的基…...

[译] 大模型推理的极限:理论分析、数学建模与 CPU/GPU 实测(2024)

译者序 本文翻译自 2024 年的一篇文章&#xff1a; LLM inference speed of light&#xff0c; 分析了大模型推理的速度瓶颈及量化评估方式&#xff0c;并给出了一些实测数据&#xff08;我们在国产模型上的实测结果也大体吻合&#xff09;&#xff0c; 对理解大模型推理内部工…...

vue3 响应式 API:readonly() 与 shallowReadonly()

readonly() readonly()是一个用于创建只读代理对象的函数。它接受一个对象 (不论是响应式还是普通的) 或是一个 ref&#xff0c;返回一个原值的只读代理。 类型 function readonly<T extends object>(target: T ): DeepReadonly<UnwrapNestedRefs<T>>以下…...

迁移学习与知识蒸馏对比

应用场景不同 迁移学习&#xff1a;通常用于不同但相关的任务之间的知识迁移。特别是当目标任务的数据量不足时&#xff0c;可以从一个已经在大规模数据上训练好的模型中获取有用的特征或参数。典型场景包括计算机视觉任务&#xff0c;比如你在ImageNet上训练了一个ResNet&…...

【Java-反射】

什么是反射&#xff1f; JAVA反射机制是在运行状态中&#xff0c;创建任意一个类&#xff0c;能获取这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&#xff1b;这种动态获取的信息以及动态调用对象的方法的功能称为java语言…...

移动UI设计要求越来越高,最为设计师应如何迎头赶上

一、引言 在当今数字化高速发展的时代&#xff0c;移动设备已经成为人们生活中不可或缺的一部分。随着科技的不断进步和用户需求的日益增长&#xff0c;移动 UI 设计的要求也越来越高。作为移动 UI 设计师&#xff0c;我们面临着巨大的挑战&#xff0c;需要不断提升自己的能力…...

大数据-121 - Flink Time Watermark 详解 附带示例详解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

MATLAB CGCS2000高斯投影坐标转经纬度坐标

坐标系转换这边需要用到mapping toolbox 首先根据原始&#xff08;x,y&#xff09;坐标对应的投影坐标系查询EPSG编号 例如这边CGCS2000 / 3-degree Gauss-Kruger CM 123E的编号就是4450 对应的编号可以https://blog.csdn.net/qq_41441896/article/details/104525296在这篇博…...

剪映专业版教程:制作堆排序算法原理演示视频

前言 今天教大家用剪映制作堆排序算法的原理演示视频。堆排序的原理是&#xff1a;先将无序序列构建成一个小根堆&#xff08;堆顶元素是整个堆中最小的&#xff09;&#xff0c;然后反复取出堆顶元素放到有序序列末尾&#xff0c;再将剩余元素重新调整成小根堆&#xff0c;重…...

av1编码--比特流结构

目录 2.2.1 序列头信息 2.2.2 帧头信息 2.2.4 时间分隔符信息 2.2.5 切片组信息 AV1 比特流是由一系列名为开放比特流单元&#xff08;OBU&#xff09;的数据单元组成。每个 OBU 由一个可变长度的字节串&#xff08;Byte String&#xff09;组成。具体来讲&#xff0c;OBU 包…...

大龄大专转行网安实录 8 条干货经验少走弯路

网络安全行业 “人才缺口 300 万 、平均年薪超 25 万” 的红利&#xff0c;让无数职场人动了转行心思。尤其是学历普通&#xff08;如大专&#xff09;的群体&#xff0c;既面临原有岗位的天花板&#xff0c;又渴望通过技术转型实现薪资跃迁。但网安行业看似门槛低&#xff0c;…...

Midscene.js技术深度解析:视觉驱动UI自动化的架构演进与实践路径

Midscene.js技术深度解析&#xff1a;视觉驱动UI自动化的架构演进与实践路径 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 在传统UI自动化测试领域&#xff0c…...

G-Helper完整指南:释放华硕笔记本潜能的轻量级控制神器

G-Helper完整指南&#xff1a;释放华硕笔记本潜能的轻量级控制神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, E…...

2026年主流AI论文写作软件全攻略(含保姆级操作教程)

以下是当前学术圈口碑TOP的6款AI写论文工具&#xff0c;覆盖从选题、开题到降重、答辩的论文全流程&#xff0c;剔除冗余工具&#xff0c;每款均附分步骤实操指南场景适配技巧&#xff0c;重点突出中文论文适配性&#xff0c;新手也能快速上手&#xff0c;效率翻倍。一、全流程…...

跟着 MDN 学CSS day_7:(层叠优先级与继承)

CSS的全称是层叠样式表&#xff08;Cascading Style Sheets&#xff09;&#xff0c;其中"层叠"这个词绝非随意选用的。理解层叠、优先级和继承这三个核心概念&#xff0c;是真正掌握CSS的关键所在。当你发现某个样式没有按预期生效时&#xff0c;十有八九是这三个机…...

甲骨文免费服务器到手后,用Xshell连接不上?这份SSH密钥配置避坑指南请收好

甲骨文云SSH连接全攻略&#xff1a;从密钥解析到Xshell实战配置 密钥管理的核心逻辑与常见误区 初次接触甲骨文云免费实例的用户&#xff0c;90%的SSH连接问题都源于密钥处理不当。与常规密码登录不同&#xff0c;甲骨文云强制采用密钥对认证机制&#xff0c;这种设计虽然提升了…...

告别低效编程:在PyCharm 2024.1中配置Baidu Comate的保姆级教程(含快捷键设置)

告别低效编程&#xff1a;在PyCharm 2024.1中配置Baidu Comate的保姆级教程&#xff08;含快捷键设置&#xff09; 作为一名长期使用PyCharm进行Python开发的工程师&#xff0c;我深刻体会到重复性编码工作对创造力的消耗。直到遇见Baidu Comate——这款能与IDE深度集成的AI编码…...