当前位置: 首页 > 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…...

PyTorch 3.0静态图分布式训练插件下载与安装(官方未公开的--enable-static-graph标志使用手册)

第一章&#xff1a;PyTorch 3.0静态图分布式训练插件下载与安装PyTorch 3.0 并非官方发布的正式版本&#xff08;截至 2024 年&#xff0c;PyTorch 最新稳定版为 2.3.x&#xff09;&#xff0c;因此“PyTorch 3.0 静态图分布式训练插件”属于概念性技术预研组件&#xff0c;目前…...

【实战】VSCode插件离线安装全攻略:从下载到部署

1. 为什么需要离线安装VSCode插件 作为一名在开发一线摸爬滚打多年的老码农&#xff0c;我遇到过太多因为网络问题导致插件安装失败的场景。比如去年在某大型制造企业的工厂MES系统升级项目中&#xff0c;开发环境完全隔离外网&#xff0c;但团队又急需使用GitLens和Python插件…...

Git GUI里那些小箭头和蓝点到底是啥?一份给新手的保姆级图解指南

Git GUI可视化指南&#xff1a;解码提交历史中的符号与分支拓扑 第一次打开Git GUI的提交历史视图时&#xff0c;那些彩色线条、小蓝点和神秘箭头就像天书般令人困惑。作为从SVN过渡到Git的开发者&#xff0c;我曾盯着这些符号发呆半小时——直到发现它们其实是项目历史的可视化…...

Easy-Monitor 安全配置完全手册:保护你的监控数据安全

Easy-Monitor 安全配置完全手册&#xff1a;保护你的监控数据安全 【免费下载链接】easy-monitor 企业级 Node.js 应用性能监控与线上故障定位解决方案 项目地址: https://gitcode.com/gh_mirrors/ea/easy-monitor 在当今数字化时代&#xff0c;企业级 Node.js 应用性能…...

LLaMA-Omni推理部署全攻略:本地与云端部署的最佳实践

LLaMA-Omni推理部署全攻略&#xff1a;本地与云端部署的最佳实践 【免费下载链接】LLaMA-Omni LLaMA-Omni is a low-latency and high-quality end-to-end speech interaction model built upon Llama-3.1-8B-Instruct, aiming to achieve speech capabilities at the GPT-4o l…...

突破学术排版瓶颈:mpMath插件的4大技术解决方案

突破学术排版瓶颈&#xff1a;mpMath插件的4大技术解决方案 【免费下载链接】mpMath 项目地址: https://gitcode.com/gh_mirrors/mpma/mpMath 当物理系研究生小林在微信公众号编辑器中第12次尝试插入傅里叶变换公式时&#xff0c;屏幕上依然是一堆错位的希腊字母——这…...

TouchGal:一站式Galgame社区解决方案终极指南

TouchGal&#xff1a;一站式Galgame社区解决方案终极指南 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 还在为寻找Galgame资源而四…...

FPGA设计中的组合逻辑环:为什么你的Verilog代码会引发警告?

FPGA设计中的组合逻辑环&#xff1a;为什么你的Verilog代码会引发警告&#xff1f; 在数字电路设计的浩瀚海洋中&#xff0c;组合逻辑环&#xff08;Combinational Loop&#xff09;就像是一个潜伏的暗礁&#xff0c;看似无害却可能让你的整个设计"触礁沉没"。作为一…...

1985–2024年武汉大学CLCD中国土地利用/覆被数据集(逐年30米栅格)|高精度长时序LUCC产品

&#x1f50d; 数据简介 CLCD&#xff08;China Land Cover Dataset&#xff09; 是由武汉大学测绘遥感信息工程国家重点实验室李熙教授、李德仁院士团队基于Landsat系列卫星影像&#xff0c;结合深度学习与多源辅助数据&#xff08;如夜间灯光、POI、道路网等&#xff09;&…...

避坑指南:通达信指标加密的4种方法实测,哪种最难被破解?

通达信指标加密技术深度测评&#xff1a;从入门到防破解实战 在量化交易和个性化指标分析领域&#xff0c;通达信作为国内主流证券分析软件&#xff0c;其自定义指标功能一直备受投资者青睐。但随之而来的指标被盗用、滥用问题也让许多开发者头疼不已——一个经过数月验证的高胜…...