多个PDF文件或PDF数据流的合并
- 背景
公司因人员变动和业务整改,提出将原打印(数据库保存的HTML字符串做替换)全部迁移至framework(利用framework完成数据字段替换与EL表达式相似,转换成PDF的二进制流返回),主要是为了方便开发和维护,对应单个的打印文件的预览都没有问题,后期提出新需求,需要勾选多个预览文件时,在一个弹框里面看到所有的pdf文件,就是一个接着一个的长pdf。
特别说明:所有打印文件的模板(framework文件)全部存在后端。 - 思路
1. 对返回的多个PDF流,得到对应的多个二进制数组
2.将得到的二进制数组组合成一个
3.将最终得到的二进制数组,outputStream.write(byte[])写回 - 历程
1.直接拼接得到的二进制数组可以正确写回,但是只显示第一个完整的PDF文件
原因:文件流有对应的开始结束标志,如:%%EOF
2.以为只要删掉除最后一个文件流(二进制数组)中标识“%%EOF”的内容就可以了,然而不只是这几个字,仍然只显示第一个文件的内容
原因:仔细查看写回的流,发现每一个文件流都有一个很长的头部数据和尾部数据,标志着一个完整的文件(可查看最后的参考流),这里面包含着规则,想要通过删除特定标志字符这种方式拼接PDF文件,不易实现,个人此时也觉得想着这种涉及到底层实现的又比较实用的操作,应该会有工具类来帮助我们实现,通过搜索发现了 PDFMergerUtility
3.PDFMergerUtility 合并多个PDF文件OutputStream os = response.getOutputStream(); // apache 提供用于 多个pdf 合并的工具类PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();for (String param : params) {// 业务返回ByteArrayOutputStream stream = service.export(param1, param);byte[] streamByteArr = stream.toByteArray();ByteArrayInputStream inputStream = new ByteArrayInputStream(streamByteArr);// 添加 pdf 数据源pdfMergerUtility.addSource(inputStream);inputStream.close();}// 也可以指定要合成的文件和合成后存储的文件位置//pdfMergerUtility.setDestinationFileName("F:\\desk\\1company\\result.pdf");OutputStream outputStream = new ByteArrayOutputStream();// 指定目标文件输出流pdfMergerUtility.setDestinationStream(outputStream);pdfMergerUtility.mergeDocuments(null);// 获取合并后的目标数据流ByteArrayOutputStream mergerUtilityDestinationStream = (ByteArrayOutputStream) pdfMergerUtility.getDestinationStream();mergerUtilityDestinationStream.writeTo(os);outputStream.close();os.close();
- 终章
PDFMergerUtility
Apache 提供的一个用于合并多个PDF文件成一个的工具类
API 参考
可能是个人流操作用得不是很频繁,所以一开始解决起来有些天真,个人觉得应该还是可以通过一些流操作代码自己实现多个文件的合并,希望在评论区得到各位的指点 - 写回的流数据参考
%PDF-1.4 %���� 4 0 obj <</Filter/FlateDecode/Length 6544>>stream //头部 M2C<9~;i�}�bė�9��)U��a�I2�$oMr��yR=NN��7'[4����ɔF�(W�|1�S�G����!�s,c�z���}+>&�:��@�]���w�T���#9V����M���Ʊ�Ǜ���$��MT��r>�s����ڽ�t�.xܶS$+���7�����Ӽ�i_�N�|C��w�q�v�cC��4
多个PDF文件或PDF数据流的合并相关推荐
- html中在线预览pdf文件之pdf在线预览插件
html中在线预览pdf文件之pdf在线预览插件 最近遇到一个需求,要在html页面查看pdf生成的pdf文件! 翻来覆去找到两种办法 ,最后采用了jquery.media.js插件 方式一 将pdf ...
- html做在线预览pdf文件,html中在线预览pdf文件之pdf在线预览插件
html中在线预览pdf文件之pdf在线预览插件 最近遇到一个需求,要在html页面查看pdf生成的pdf文件! 翻来覆去找到两种办法 ,最后采用了jquery.media.js插件 方式一 将pdf ...
- Linux中合并多个Pdf文件(使用pdfunite,合并比较简单)
操作系统:ubuntu 快捷键Ctrl+Alt+T进入终端操作: 首先进入要合并的pdf的目录 然后下面这条命令是合并当前目录下全部pdf文件 pdfunite *.pdf all.pdf 当然也可以 ...
- 如何将多个PDF文件合并为一个PDF文件?PDF文件合并教程
如何合并PDF文件?PDF我们都不陌生,很多人经常在网站上搜狐各种类型的PDF资料,但是有时因为资料太多不好管理和查阅,如果可以把同类型的多个PDF文件合并为一个PDF文件,那无论是保存还是查阅,都会 ...
- php中嵌入pdf文件,使用Base64在PHP中附加PDF文件(Appending PDF Files in PHP with Base64)
使用Base64在PHP中附加PDF文件(Appending PDF Files in PHP with Base64) 我有一系列我想合并在一起的base64 PDF文件. 目前我正在使用file_ ...
- Latex图表制作:关于EPS文件转PDF文件及PDF裁剪自动化的Shell脚本制作
关于EPS文件转PDF文件及PDF裁剪自动化的Shell脚本制作 前言 一.EPS文件转PDF文件 1. 过去的科研绘图方案 2. 未来的科研绘图方案 二.使用步骤 1. 单例操作 a. 安装epst ...
- 如何编辑PDF文件,PDF怎么旋转页面并保存
在编辑PDF文件的时候总会遇到各种各样的问题,编辑PDF文件是需要用到PDF编辑器的,在使用PDF文件的时候,有时文件的页面不是正常显示的,怎么将文件的页面旋转呢,不会的话,就一起看看下面的文章,了解 ...
- 怎么编辑PDF文件,PDF去水印的方法
随着PDF文件使用的越来越多,PDF文件的修改也是大家常常谈论到的话题,在编辑文件的时候需要使用PDF编辑器,那么,文件中如果有水印,想要删除水印怎么去操作呢,是不是也有很多的小伙伴想知道怎么删除的, ...
- html 在线预览pdf功能,html中在线预览pdf文件之pdf在线预览插件
html中在线预览pdf文件之pdf在线预览插件 最近遇到一个需求,要在html页面查看pdf生成的pdf文件!javascript 翻来覆去找到两种办法 ,最后采用了jquery.media.js插 ...
- 什么软件可以修改PDF文件,PDF怎么修改内容
当今科技有时代的发展与进步,我们现在使用的文件也是多样式的,除了Word跟TXT文档还有一种PDF文件,现在PDF文件的使用越来越频繁了,有时候还需要修改PDF文件内容,那么,什么软件可以修改PDF文 ...
最新文章
- CSS 文字,边框实现从左至右颜色渐变
- 48. Rotate Image ~
- Fiddler本机调试的方法
- python代码自动生成器下载_Python代码生成器
- JS 防止表单重复提交
- C# 获得Excel工作簿Sheet页面(工作表)集合的名称
- 小tips:JS之浅拷贝与深拷贝
- Jenkins自动化构建Gitee项目
- 科立捷默认频率_科立捷电子产品技术参数.doc
- 【财富空间】像先知一样思考,如拳手般战斗
- android不能启动rom服务,基于uniapp开发的apk不能正常在android10上启动运行
- 带下波浪线的textView
- 用C++实现iec61850协议
- 磁盘清理软件:DaisyDisk for Mac
- 电脑壁纸该换了,mac必备壁纸软件Dynamic Wallpaper
- 1418:猴子选大王
- Java的并发集合框架
- 内容超出div,设置滚动条
- 《深入理解计算机系统》读书笔记-016(第 12 章 并发编程)
- C++文件操作API函数介绍
热门文章
- ecshop qq互联登录OAuth2.0
- WAC360、WAC361系列产品本地MAC认证(WEB版)
- js获得相同css的第几个,vue,css,js用户代码片段(vs code)
- 基于WiFi模块的Android WiFi通信
- 防止产品发布灾难的7个软件测试技巧
- 珍珠项链 (20 分)
- [附源码]计算机毕业设计Python港口集团仓库管理系统(程序+源码+LW文档)
- 从0到100:网课老师如何自媒平台卖课?
- 别拿汇报不当事!5个技巧教你做好职场汇报!
- 做事要靠自己-----让你变得更坚强
- html中在线预览pdf文件之pdf在线预览插件