1.首先pom文件添加依赖,操作pdf文件工具类

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

2.pdf合并操作

public ResponseEntity<byte[]> mergePdf(MultipartFile[] files) {//pdf合并工具类PDFMergerUtility mergePdf = new PDFMergerUtility();//合并pdf生成的文件名String filename = "d:/"+new Date().getTime()+".pdf";for (MultipartFile multipartFile : files) {try {byte[] bytes = multipartFile.getBytes();InputStream in = new ByteArrayInputStream(bytes);mergePdf.addSource(in); // 合并pdf} catch (IOException e) {throw new BaseException("Error merging pdf files- " + filename, e);}}try {// 设置合并生成pdf文件名称及路径mergePdf.setDestinationFileName(filename);mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());} catch (IOException e) {e.printStackTrace();}return exportFile(new File(filename), filename);}

注意:在feign之间传输二进制流时,返回值必须为 ResponseEntity 类型,所以封装了个私有方法,如下:

private ResponseEntity<byte[]> exportFile(File file, String filename) {HttpHeaders headers = new HttpHeaders();ResponseEntity<byte[]> entity = null;InputStream in=null;try {in=new FileInputStream(file);byte[] bytes = new byte[in.available()];filename = URLEncoder.encode(filename, "utf-8");in.read(bytes);headers.add("Content-Disposition", "attachment;filename="+filename);entity = new ResponseEntity<>(bytes, headers, HttpStatus.OK);} catch (Exception e) {e.printStackTrace();}finally {if(in!=null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}return entity;}

注意:feign层代码接收类型 必须为 feign.Response

    Response mergePdf(@RequestPart("file") MultipartFile[] file);

3.消费层 controller代码:

public void mergePdf(@RequestPart("file") MultipartFile[] file, HttpServletResponse response){InputStream inputStream = null;OutputStream outputStream = null;try {// 调用feign层代码获取Response Response responseEntity = orderService.mergePdf(file);// Response 获取响应体Response.Body body = responseEntity.body();// 通过响应体来获取 一个输入流inputStream = body.asInputStream();BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);// 设置http 响应头信息等response.setContentType("multipart.form-data");response.setHeader("Content-Disposition", responseEntity.headers().get("Content-Disposition").toString().replace("[","").replace("]",""));outputStream = new BufferedOutputStream(response.getOutputStream());int length = 0;byte[] temp = new byte[1024 * 10];while ((length = bufferedInputStream.read(temp)) != -1) {// 输出二进制流outputStream.write(temp, 0, length);}outputStream.flush();} catch (IOException e) {e.printStackTrace();} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}

最后调用接口,可以发现浏览器响应一个 blob 协议地址,最终由前端处理为二进制文件

java多个pdf合并为一个pdf,并通过feign下载相关推荐

  1. Java使用iText PDF合并PDF(将多个PDF合并成一个PDF)

    1 配置pom文件 我用的是5.4.3的版本 <dependency><groupId>com.itextpdf</groupId><artifactId&g ...

  2. Java 多个pdf合并成一个pdf

    前言 实际开发过程中,会因实际业务原因需把多个pdf合并成一个pdf. 代码如下: import com.itextpdf.text.pdf.*; import com.itextpdf.text.D ...

  3. 多个vue项目合并成一个_集美们,快看如何一步将多个PDF合并成一个PDF

    之前的推文有提到,如何将多幅图片从word中提取出来.今天我们就一起来康康如何快速将多个PDF合并成一个PDF吧! 首先,我们需要一个PDF阅读器,这个阅读器可以是Foxit PDF Editor,也 ...

  4. 如何将几个pdf合并成一个pdf?教你pdf合并最快速的方法

    如何将几个pdf合并成一个pdf?想必很多朋友在日常的工作中,都会接触到pdf文件.有时候我们面对大量的pdf文件,为了方便查看和管理,就需要将几个pdf合并成一个pdf,那么具体该怎么操作呢?相信有 ...

  5. 如何把很多个pdf合成一个?pdf合并成一个pdf软件?

    怎么把多个pdf合成一个pdf?有时候我们需要把多个pdf合并成一个pdf,但是还有些小伙伴不知道怎么合并,下面给大家分享一个超级简单的把多个pdf合并成一个pdf的方法: 搜索一下:~~~~~~轻云 ...

  6. pdf合并成一个pdf软件?能合并pdf的软件?

    多个pdf合并成一个pdf软件工具? 现在PDF文件是我们日常办公中比较常见的一种文件格式, 我们在处理PDF文件的时候,难免会遇到各种各样的问题.有时候我们需要把多个pdf合并成一个pdf,但是还有 ...

  7. 如何免费将多个PDF合并成一个PDF文件?

    PDF文档方便阅读.不可直接编辑等特性相信大家都有所了解,但在工作和学习中不可避免的需要将多个PDF合并成一个PDF文档,今天就来分享一下如何免费将多个PDF合并成一个PDF文档吧. 1.使用福昕PD ...

  8. 如何把多个pdf合并成一个pdf?

    如何把多个pdf合并成一个pdf?在电脑上我们经常需要使用各种pdf文件,也需要对pdf文件进行各种操作,除了pdf格式转换外,还有一种pdf文件操作的次数也比较多,那就是pdf合并,将多个pdf文件 ...

  9. pdf合并成一个pdf工具,可以合并pdf的软件哪个好?

    pdf合并成一个pdf工具哪个好? 现在PDF文件是我们日常办公中比较常见的一种文件格式, 我们在处理PDF文件的时候,难免会遇到各种各样的问题.有时候我们需要把多个pdf合并成一个pdf,但是还有些 ...

  10. pdf合并成一个pdf顺序不对怎么办?为什么pdf合并完顺序乱了?

    怎么合并pdf顺序不会乱?有时候我们需要把多个pdf合并成一个pdf,但是还有些小伙伴不知道怎么合并,下面给大家分享一个超级简单的把多个pdf合并成一个pdf的方法: 搜索一下:~~~~~~轻云pdf ...

最新文章

  1. UWP 手绘视频创作工具技术分享系列 - 手绘视频导出
  2. 二叉排序树的建立、先序/中序/后序遍历、查找
  3. 新架构让数据中心犹如PC
  4. mysql存储过程 --游标的使用 取每行记录 (多字段)
  5. Android 标题栏(2)
  6. Moss网站在不同服务器的迁移
  7. WPS简历模板的图标怎么修改_个人简历模板集锦,简历自我评价怎么写?
  8. 分解质因数_java
  9. 滴滴顺风车即将重新上线,试运营方案涉嫌歧视女性乘客
  10. 深度学习分类问题中accuracy等评价指标的理解
  11. ps 图片 透明度 设置
  12. 软件架构-解密电商系统商品模块业务
  13. word必备快捷键使用
  14. 静态路由 动态路由 php,静态路由汇总(路由聚合)
  15. 【Python量化】风险平价策略
  16. 数字逻辑·逻辑代数【运算、函数】
  17. 查找计算机里包含相关文字,windows7如何搜索包含关键字的文件_win7电脑文件怎么查关键字文件...
  18. MT7628路由器工作原理,MT7628处理器相关参数介绍
  19. 如何去掉图片上的水印 图片水印怎么去掉
  20. android单元测试AndroidTestCase

热门文章

  1. 幂等 (idempotence) 的概念
  2. 2022中央财经大学《901C语言程序设计》考研编程题回忆版
  3. alios下载_AliOS-Things ESP8266 编译下载
  4. php记录访问者ip和次数,一个能对访问者进行编号、记录访问次数、IP、时间的统计制作实例...
  5. Matlab中的ismember和contains傻傻分不清
  6. VMware收购云监控公司Wavefront
  7. IOS中结构体(struct)
  8. Java秒杀系统实战系列~构建SpringBoot多模块项目
  9. mysql如何高效存储IPv4、IPv6地址
  10. Netty游戏服务器实战开发(11):Spring+mybatis 手写分库分表策略(续)