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

前端上传pdf文件

html

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

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依赖

xml 复制代码
<dependency>
	<groupId>org.apache.pdfbox</groupId>
	<artifactId>pdfbox</artifactId>
	<version>2.0.27</version>
</dependency>

controller

java 复制代码
@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

java 复制代码
@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);
}
相关推荐
稚南城才子,乌衣巷风流2 小时前
函数:编程中的核心概念
开发语言·前端·javascript
大模型码小白3 小时前
JAVA 集合框架进阶:List 与 Set 的深度解析与实战
java·开发语言·人工智能·windows·语言模型·list·ai编程
IT_陈寒3 小时前
为什么我的JavaScript异步代码总是不按顺序执行?
前端·人工智能·后端
索西引擎3 小时前
【React】useState 状态更新机制:批量更新策略与“异步“错觉的深层解析
前端·react.js·前端框架
名字还没想好☜3 小时前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
慢功夫3 小时前
💡第五篇:VSCode插件是如何与主进程通信的?
前端·visual studio code
锋行天下3 小时前
打造企业内部知识库系统RAG全栈项目
前端·后端·架构
竹林8184 小时前
用 ethers.js 连接 MetaMask 实现钱包登录:一个真实项目中的完整踩坑记录
前端·javascript
虚惊一场4 小时前
在浏览器里跑 Prettier:格式化 Markdown 的四个难点
前端·javascript·vue.js
音符犹如代码4 小时前
后端视角看 EventBus:发布订阅总线的原理、场景与用法
java·spring boot·guava