PDF生成、合并及压缩优化(Java)
依赖文件:
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version>
</dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>
创建PDF文件
public PdfReader getPdfBytes(Element element) {if (element == null) {return null;}Document document = new Document();try {ByteArrayOutputStream bos = new ByteArrayOutputStream();PdfWriter writer = PdfWriter.getInstance(document, bos);writer.setFullCompression();writer.setCompressionLevel(PdfStream.BEST_COMPRESSION);document.open();document.add(element);document.close();writer.close();return new PdfReader(bos.toByteArray());} catch (Exception e) {logger.error("getPdfBytes error", e);}return null;
}public PdfPTable getUserTableInfo(List<UserDataVo> data) {PdfPTable table = new PdfPTable(3);table.setWidthPercentage(100);float width = PageSize.A4.getWidth() - 40;float dataWidth = width / 4;float[] columnWidth = new float[] { dataWidth, dataWidth, dataWidth * 2};try {table.setTotalWidth(columnWidth);} catch (Exception e) {table.setTotalWidth(width);}table.addCell(getPdfCellInfo("ID"));table.addCell(getPdfCellInfo("用户"));table.addCell(getPdfCellInfo("简介"));if (CollectionUtils.isNotEmpty(data)) {data.stream().forEach(col -> {table.addCell(getPdfCellInfo(col.getId()));table.addCell(getPdfCellInfo(col.getUserName()));table.addCell(getPdfCellInfo(col.getUserText()));});}return table;
}
private PdfPCell getPdfCellInfo(String name) {return getPdfCellInfo(name, 1);
}
private PdfPCell getPdfCellInfo(String name, int rowSpan) {Font font = getBaseFontInstance();PdfPCell cell = new PdfPCell(new Paragraph(StringUtils.defaultString(name), font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);if (rowSpan > 1) {cell.setRowspan(rowSpan);}return cell;
}
public static Font getBaseFontInstance() {if (baseFont == null) {baseFont = getPdfFont();}return baseFont;
}
private static Font getPdfFont() {try {BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);return new Font(bf, 10);} catch (Exception e) {return null;}
}
合并pdf
public byte[] createAndMergeBlobPdf(List<PdfReader> readers) {if (CollectionUtils.isEmpty(readers)) {return null;}try {ByteArrayOutputStream bos = new ByteArrayOutputStream();Document document = new Document();if (CollectionUtils.isNotEmpty(readers)) {PdfCopy copy = new PdfCopy(document, bos);copy.setFullCompression();copy.setCompressionLevel(PdfStream.BEST_COMPRESSION);document.open();for (PdfReader reader: readers) {if (reader != null) {int n = reader.getNumberOfPages();for (int j = 1; j <= n; j++) {document.newPage();PdfImportedPage page = copy.getImportedPage(reader, j);copy.addPage(page);}reader.close();}}document.close();copy.close();}return bos.toByteArray();} catch (Exception e) {logger.error("createAndMergeBlobPdf error", e);}return null;
}
优化:PdfCopy 更换为PdfSmartCopy,能压缩一半的大小
- PdfCopy:它会存储两个不同的图片流对象,在索引表中会引用两次,因此虽然是一个相同的图片,但是在不同的页面上会分别显示对应的图片。
- PdfSmartCopy:经过它处理,会重建索引表,会把这个图片流对象引用到不同的页面上,而这个图片对象只存储了一份。
PdfCopy处理比较快,但生成的文件的大小会很大,PdfSmartCopy比较慢,会消耗更多内存,但文件大小会很小。
PDF生成、合并及压缩优化(Java)相关推荐
- java实现pdf生成,包括合并图片
参考帖子: 这位大佬的帖子必读,因为涉及到pdf创建表单的教程: java使用itext填充pdf模板,超简单教学,有手就行 以下是学习当中参考的帖子: java pdf域插入img_java实现在p ...
- java Web程序使用wro4j合并、压缩js、css等静态资源
在Web项目中,js.css合并压缩,不仅有利于减少Http请求数量.减少宽带资源占用,还能有效的管理各种js.css的引入,使整个项目更加有序.而对于访问用户来说,其更大的好处是增加了页面的打开速度 ...
- java css js 合并_java Web程序使用wro4j合并、压缩js、css等静态资源
在Web项目中,js.css合并压缩,不仅有利于减少Http请求数量.减少宽带资源占用,还能有效的管理各种js.css的引入,使整个项目更加有序.而对于访问用户来说,其更大的好处是增加了页面的打开速度 ...
- java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)
freemark生成word/pdf 一. 背景 二.实现的技术选型以及遇到的坑 三.最终的效果 2.1 `.doc` word效果展示 2.1 `.docx` word效果展示 2.2 docx w ...
- java将多个pdf文件合并成一个pdf文件
需要下载jar:https://pan.baidu.com/s/1_wOUUAqWz_5jbfwzMP8ahg package com.skysz.framework.file;import java ...
- itext根据模版生成PDF与合并多个PDF以及向已存在PDF增加水印设置权限等操作
我之前写了一篇文章讲了itext的基础操作常用方法(https://my.oschina.net/itazi/blog/1812042),但是有时涉及到比较复杂的PDF生成,手工操作就很复杂,可以使用 ...
- 用JAVA将多个PDF文件合并成一个PDF文件
实现所需JAR包:pdfbox-1.7.1 JAR包下载地址:https://pdfbox.apache.org/ pom依赖: <dependency><groupId>or ...
- 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端
从入门到精通-分布式文件系统架构-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端 一.FastDFS介绍 二.流程图 FastDFS架构原理分析(重点) ...
- thinkphp5 图片压缩旋转_【好工具】在线免费无限制的PDF处理工具(转换、编辑、分割、合并、压缩)...
在线好用的 PDF 编辑工具,PDF 转文档,PDF 压缩.编辑.分割不再难,解密 PDF 文档也在行,快来试试- 作者 & 编辑 | Leong SmallPDF SmallPDF http ...
最新文章
- 全球芯片行业现状分析:大家都在依赖美国 未来如何破局?
- MyEclipse10安装SVN插件
- CTF web题总结--绕过正则表达式
- 大唐电信JAVA笔试题面试题
- python怎么显示结果_python中plot实现即时数据动态显示方法
- Blender文档翻译:Operators tutorial(操作教程)
- vba 循环读取单元格_利用VBA打开顺序文件,并读取
- db2 查看表结构_数据库结构文档的生成利器
- Java开发工程师,每个阶段需要掌握什么重点?
- rf 遍历列表_RF学习笔记
- 2019-数学建模美赛-B题翻译
- 各种材料衣服的保养 全面知识分享
- 企业微信登陆服务器设置,企业微信怎么登入
- 3D打印经验分享导航
- oracle12c的CDB与PDB
- 项目管理面试常见问题及答案
- 社区团购小程序怎么做,全流程解析
- 如何使用unity制作雷达探测目标效果动画
- Linux查看DNS地址以及端口,nslookup命令以及更强大的dig命令
- 小型计算机电源,身材虽小五脏俱全 精致SFX小电源推荐榜