当前位置: 首页 > news >正文

java压缩pdf

    <!-- PDF操作,itext7全家桶 --><dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.15</version><type>pom</type></dependency>

package org.example;

import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.pdf.xobject.PdfImageXObject;

import javax.imageio.ImageIO;
import java.awt.;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.
;

public class Main {

public static void main(String[] args) throws IOException {PdfName key = new PdfName("ITXT_SpecialId");PdfName value = new PdfName("123456789");// 读取pdf文件PdfReader reader = null;try {reader = new PdfReader(new FileInputStream(new File("E:\\mqdemo\\paixu\\src\\main\\resources\\static\\2024作品集 .pdf")));} catch (IOException e) {throw new RuntimeException(e);}ByteArrayOutputStream swapStream = new ByteArrayOutputStream();PdfDocument pdfDocument = new PdfDocument(reader,new PdfWriter(swapStream));long n = reader.getLastXref();PdfObject object;PdfStream stream;//查找图像并操作图像流for (int i = 0; i < n; i++) {object = pdfDocument.getPdfObject(i);if (object == null || !object.isStream())continue;stream = (PdfStream) object;PdfObject pdfsubtype = stream.get(PdfName.Subtype);if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.Image.toString())) {PdfImageXObject image = new PdfImageXObject(stream);int i1 = image.getPdfObject().getAsNumber(PdfName.BitsPerComponent).intValue();//小于8的都跳过,BitsPerComponent=4是提示报错The color depth BitsPerComponent的值 is not supported//this.bpc != 8 ImagePdfBytesInfo类下decodeTiffAndPngBytes//当位图不等于8时,直接跳过if (i1 != 8) {continue;}BufferedImage bi = image.getBufferedImage();if (bi == null) continue;int width = (int) (bi.getWidth() * 0.7f);int height = (int) (bi.getHeight() * 0.7f);BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);AffineTransform at = AffineTransform.getScaleInstance(0.7f, 0.7f);Graphics2D g = img.createGraphics();g.drawRenderedImage(bi, at);ByteArrayOutputStream imgBytes = new ByteArrayOutputStream();//标记此处,后面会修改ImageIO.write(img, "JPG", imgBytes);stream.clear();stream.setData(imgBytes.toByteArray(), false);stream.put(PdfName.Type, PdfName.XObject);stream.put(PdfName.Subtype, PdfName.Image);stream.put(key, value);stream.put(PdfName.Filter, PdfName.DCTDecode);stream.put(PdfName.Width, new PdfNumber(width));stream.put(PdfName.Height, new PdfNumber(height));stream.put(PdfName.BitsPerComponent, new PdfNumber(8));stream.put(PdfName.ColorSpace, PdfName.DeviceRGB);}}//将数据写入到输出流中pdfDocument.close();reader.close();System.out.println("pdf压缩完成, 文件大小="+ swapStream.size());FileOutputStream fileOut = new FileOutputStream("outputFile.pdf");fileOut.write(swapStream.toByteArray());}

}

相关文章:

java压缩pdf

<!-- PDF操作,itext7全家桶 --><dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.15</version><type>pom</type></dependency>package org.example; import…...

[AIGC] ClickHouse:一款高性能列式数据库管理系统

轮流探索数据库的世界&#xff0c;我们不得不提到一个重要的角色——ClickHouse。ClickHouse是一个开源的列式数据库管理系统(DBMS)&#xff0c;以其卓越的性能&#xff0c;高效的查询能力和易扩展性而被业界广泛关注&#xff0c;尤其在大数据分析方面。 文章目录 1. 什么是 Cl…...

深度学习21-30

1.池化层作用&#xff08;筛选、过滤、压缩&#xff09; h和w变为原来的1/2&#xff0c;64是特征图个数保持不变。 每个位置把最大的数字取出来 用滑动窗口把最大的数值拿出来&#xff0c;把44变成22 2.卷积神经网络 &#xff08;1&#xff09;conv&#xff1a;卷积进行特征…...

google浏览器无法访问大端口的处理方式

属性的目标中添加后缀内容或者修改后台端口为常用端口&#xff0c;比如8080等。 “C:\Program Files\Google\Chrome\Application\chrome.exe” --explicitly-allowed-ports8888...

微信小程序余额退费

需求&#xff1a;用户充值使用后的剩余金额&#xff0c;需要退回到用户原路。 参考文档&#xff1a;微信支付-开发者文档 pom.xml配置&#xff1a; <!--微信支付SDK--> <dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId&g…...

宁波银行票据案例解读,要注入科技赋能票据新形式

随着科技的飞速发展&#xff0c;金融行业正迎来一场前所未有的变革。作为一家以科技创新为驱动的现代化银行&#xff0c;宁波银行在这场变革中积极探索&#xff0c;宁波银行票据案例之后持续通过引入先进技术&#xff0c;为客户提供更加高效、智能的金融服务。 宁波银行推出的…...

博客已迁移

迁移至 烧烤er (makkapakka996.github.io)...

大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama等)

老牛同学之前使用的MacBook Pro电脑配置有点旧&#xff08;2015 年生产&#xff09;&#xff0c;跑大模型感觉有点吃力&#xff0c;操作起来有点卡顿&#xff0c;因此不得已捡起了尘封了快两年的MateBook Pro电脑&#xff08;老牛同学其实不太喜欢用 Windows 电脑做研发工作&am…...

24年嘉兴市索贝进出口有限公司--信息安全实施项目

截至24年6月24日&#xff0c;oms生产环境订单数12万5673条。 索贝是一家致力于成为竹木小家具头部企业的公司&#xff0c;截至24年6月24日&#xff0c;在册员工数130人&#xff0c;产值10个亿。 由于信息安全人才和能力的缺失&#xff0c;导致部署在阿里云生产环境的系统处于…...

亚马逊云科技官方活动:一个月拿下助理架构师SAA+云从业者考试认证(送半价折扣券)

为了帮助大家考取AWS SAA和AWS云从业者认证&#xff0c;小李哥争取到了大量考试半价50%折扣券&#xff0c;使用折扣券考试最多可省75刀(545元人民币)。 领取折扣券需要加入云师兄必过班群&#xff0c;在群中免费领取。目前必过班群招募到了超过200名小伙伴&#xff0c;名额有限…...

【山东】2024年夏季高考文化成绩一分一段表

文末有图片版&#xff0c;可直接保存下载&#xff01;&#xff01; 2024年夏季高考文化成绩一分一段表分数段全体-选考物理-选考化学-选考生物-选考思想政治-选考历史-选考地理分数段本段人数累计人数本段人数累计人数本段人数累计人数本段人数累计人数本段人数累计人数本段人…...

栈与队列 Leetcode 347 前k个高频元素

栈与队列 Leetcode 347 前k个高频元素 Leetcode 347 灵活运用C库函数&#xff0c;使用匿名函数排序&#xff0c;sort可以替换为快排实现&#xff08;面试感觉可能会手撕&#xff0c;机考直接使用sort&#xff09; class Solution { public:vector<int> topKFrequent(v…...

windchill 相关配置

-Dhttp.proxyHostproxy.acme.com -Dhttp.proxyPort8080 -Dwt.rmi.clientSocketFactorywt.boot.WTRMIMasterSocketFactory -Dwt.rmi.javarmicgiservlet/JavaRMIServlet...

XGBoost算法深度解析:原理、实现与应用

摘要 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是一种高效的机器学习算法&#xff0c;以其出色的预测性能和计算效率在众多数据科学竞赛和实际应用中取得了巨大成功。本文将深入探讨XGBoost算法的基本原理、实现机制、优化技巧以及在不同领域的应用案例。 1…...

27-29、redis优化(令牌主动失效机制)-controllert额外添加参数接收请求头、拦截器

1、SpringBoot集成redis <!--redis坐标--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> @SpringBootTest//如果在测试类上添加了这个注解,那么…...

【Linux】性能分析器 gperftools 详解

1、安装 1.1 源码安装 1)源码下载 最新版本:https://github.com/gperftools/gperftools 稳定版本:https://github.com/gperftools/gperftools/releases 2)编译 ./configure make -j83)安装,默认安装在/usr/local/lib目录下 sudo make install1.2 命令安装 以Ubuntu…...

C语言基础——函数(2)

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 文章目录 前言 一、return语句 二、数组做函数参数 三、嵌套调用和链式访问 3.1 嵌套调用 3.2 链式访问 四、函数声明和定义 4.1 单个文件 4.2 多个文件 总结 前言 大家好啊&#xff0c;继我们上一…...

Kafka Stream 流处理设计概述

Kafka Stream 流处理设计概述 Kafka 流处理是指使用 Kafka 及其生态系统中的组件来处理实时数据流。Kafka Streams 是 Kafka 官方 提供的流处理库,它简化了构建流处理应用程序的过程,并与 Kafka 无缝集成。以下是 Kafka 流处理的设 计原理和相关概念。 1. Kafka 流处理基本…...

Centos7安装自动化运维Ansible

自动化运维Devops-Ansible Ansible是新出现的自动化运维工具&#xff0c;基于Python 开发&#xff0c;集合了众多运维工具&#xff08;puppet 、cfengine、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置 、批量程序部署、批量运行命令 等功能。Ansible…...

element-ui 下拉菜单el-dropdown-item添加点击事件

使用element-ui下拉菜单组件Dropdown时绑定点击事件&#xff0c;事件不生效。 click 常见于其用在Vue中的事件绑定&#xff0c;而实际上是 v-on 的简写&#xff0c;而 v-on 则是对 vue 的事件体系封装之后的 API接口。 native修饰符用于处理DOM原生事件&#xff0c;由于组件 …...

Python try...except ImportError 语句详解

在Python编程中&#xff0c;ImportError 是与模块导入相关的核心异常。优雅地处理它&#xff0c;是编写健壮、可维护和跨平台代码的关键。try...except ImportError 结构正是实现这一目标的标准工具。本文将为你抽丝剥茧&#xff0c;从基础概念到高级实践&#xff0c;全面解析这…...

别再手动算位宽了!Vivado FIR IP核的位宽计算逻辑与配置避坑指南

Vivado FIR IP核位宽计算实战&#xff1a;从黑盒解析到精准配置 在FPGA数字信号处理领域&#xff0c;FIR滤波器作为基础构建模块&#xff0c;其性能表现直接影响整个系统的信号处理质量。而位宽配置这个看似简单的参数&#xff0c;往往成为项目后期调试阶段的"隐形杀手&qu…...

解锁你的音乐宝藏:ncmdump让网易云音乐文件自由播放

解锁你的音乐宝藏&#xff1a;ncmdump让网易云音乐文件自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 当你精心收藏的网易云音乐只能在特定客户端播放时&#xff0c;那种被束缚的感觉是否让你感到无奈&#xff1f;想象一下…...

5分钟快速上手:使用res-downloader实现视频号批量下载的终极指南

5分钟快速上手&#xff1a;使用res-downloader实现视频号批量下载的终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …...

防火门安装与验收要点|闭门器、密封条、顺序器缺一不可

防火门安装与验收要点一、必备配件&#xff08;缺一不可&#xff09;闭门器&#xff1a;自动关门&#xff0c;火灾常态闭合防火密封条&#xff1a;遇火膨胀&#xff0c;隔烟阻火顺序器&#xff1a;双扇门专用&#xff0c;保证先后闭合二、安装要点门框墙体嵌实牢固&#xff0c;…...

MTKClient终极指南:解锁联发科芯片调试的专业解决方案

MTKClient终极指南&#xff1a;解锁联发科芯片调试的专业解决方案 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient作为一款专为联发科&#xff08;MediaTek&#xff09;芯片设计的…...

Redis增强工具包:封装分布式锁、缓存模板与监控的最佳实践

1. 项目概述&#xff1a;一个Redis开发者的“瑞士军刀”在分布式系统和高并发场景下&#xff0c;Redis几乎成了标配。但用久了你会发现&#xff0c;官方客户端虽然稳定&#xff0c;但在日常开发、调试、运维中&#xff0c;总有些“不够顺手”的地方。比如&#xff0c;想批量按模…...

基于轨道模型构建现代化流程编排系统:从概念到实践

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫s4kuraN4gi/orbit-app。乍一看这个仓库名&#xff0c;可能很多人会有点懵&#xff0c;不知道它具体是做什么的。我花了一些时间深入研究&#xff0c;发现这是一个围绕“轨道”概念构建的现代化应用。这…...

初创团队如何通过Taotoken的Token Plan实现成本可控的AI应用开发

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创团队如何通过Taotoken的Token Plan实现成本可控的AI应用开发 对于预算敏感的初创团队和独立开发者而言&#xff0c;在开发AI应…...

基于LLM与视觉模型融合的智能体框架:从原理到工业质检实践

1. 项目概述&#xff1a;当AI学会“看”与“想”最近在探索AI与视觉结合的落地场景时&#xff0c;我深度体验了landing-ai/vision-agent这个项目。它不是一个简单的图像识别工具&#xff0c;而是一个试图让AI具备“视觉推理”能力的智能体框架。简单来说&#xff0c;它让AI不仅…...