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

C# 压缩PDF文件

PDF 文件可以包含文本、图片及各种媒体元素,但如果文件太大则会影响传输效果同时也会占用过多磁盘空间。通过压缩PDF文件,能够有效减小文件大小,从而提高传输效率并节省存储空间。想要通过C#代码快速有效地压缩 PDF 文件,下面是实现思路:

在 C# 中压缩 PDF

1、在VS中使用 NuGet包管理器将 “spire.pdf” 安装到程序中,并导入所需的命名空间。(也可下载Spire.PDF后手动引入);

2、实例化 PdfCompressor 类对象并加载需压缩的PDF文件;

3、通过 TextCompressionOptions 类来压缩PDF文件中的字体;

//获取文本压缩选项TextCompressionOptions textCompression = compressor.Options.TextCompressionOptions;
//设置是否压缩字体
textCompression.CompressFonts = true;
//设置是否嵌入字体
textCompression.UnembedFonts = true;

4. 通过 ImageCompressionOptions 类来压缩PDF文件中的图片;

//获取图片压缩选项ImageCompressionOptions imageCompression = compressor.Options.ImageCompressionOptions;
//设置是否压缩图片
imageCompression.CompressImage = true;
//设置图片质量
imageCompression.ImageQuality = ImageQuality.Low;
//设置是否调整图片大小
imageCompression.ResizeImages = true;

5. 保存压缩后的PDF文件。

PDF压缩前后效果对比如图:

▶ Spire.PDF for .NET 优化了压缩PDF文件的方法,在压缩PDF中的图片时,将图片质量设置为 low, 压缩效果最好,但可能文件可读性会受到一定影响。在使用时可根据自己的需求来设置图片质量 (High/ Medium/ Low)。

附上完整代码供自行测试:

using Spire.Pdf;
using Spire.Pdf.Conversion.Compression;namespace CompressPdf
{class Program{static void Main(string[] args){//实例化 PdfCompressor 类对象并加载PDF文件PdfCompressor compressor = new PdfCompressor("文件.pdf");//获取文本压缩选项TextCompressionOptions textCompression = compressor.Options.TextCompressionOptions;//设置是否压缩字体textCompression.CompressFonts = true;//设置是否嵌入字体textCompression.UnembedFonts = true;//获取图片压缩选项ImageCompressionOptions imageCompression = compressor.Options.ImageCompressionOptions;//压缩图片imageCompression.CompressImage = true;//设置图片质量imageCompression.ImageQuality = ImageQuality.High;//调整图片大小imageCompression.ResizeImages = true;//将压缩后PDF保存至指定位置compressor.CompressToFile("压缩.pdf");}}
}

想了解C#操作PDF文件的更多示例,点击前往Spire.PDF教程页

相关文章:

C# 压缩PDF文件

PDF 文件可以包含文本、图片及各种媒体元素,但如果文件太大则会影响传输效果同时也会占用过多磁盘空间。通过压缩PDF文件,能够有效减小文件大小,从而提高传输效率并节省存储空间。想要通过C#代码快速有效地压缩 PDF 文件,下面是实…...

JS点击图片指定对象变色两种方法

要求&#xff1a;点击上面的颜色实现下面的图像变成相同的颜色 难点&#xff1a;对于js函数的this对象不太清楚如何传递 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>changeColor</title>&l…...

什么是浏览器指纹?指纹浏览器如何避免浏览器指纹的追踪识别?

在做独立站跨境电商的过程中&#xff0c;海外社交媒体平台已成为我们必不可少的交易渠道。但是&#xff0c;由于各大平台对账号管理极其严格&#xff0c;对账户进行严密监控也成为了常态。这当然与浏览器指纹识别有关&#xff0c;今天龙哥就给大家科普一下什么是浏览器指纹&…...

uni-app 、Spring Boot 、ant Design 打造的一款跨平台包含小说(仿真翻页、段落听书)、短视频、壁纸等功能含完备后台管理的移动应用

简介 咪哩快看&#xff0c;为用户提供优质阅读&#xff0c;短视频&#xff0c;共同记录美好生活的移动应用&#xff0c;并含有一套完备的后台管理体系&#xff0c;助力开发者快速数字化&#xff0c;开启你的财富之门&#xff01; 官网&#xff1a; https://miliqkdoc.motopa.…...

STM32-EXTI中断

EXTI简介 EXTI&#xff08;Extern Interrupt&#xff09;外部中断 EXTI可以监测指定GPIO口的电平信号&#xff0c;当其指定的GPIO口产生电平变化时&#xff0c;EXTI将立即向NVIC发出中断申请&#xff0c;经过NVIC裁决后即可中断CPU主程序&#xff0c;使CPU执行EXTI对应的中断程…...

2023云栖大会,Salesforce终敲开中国CRM市场

2015年被视为中国CRM SaaS元年&#xff0c;众多CRM SaaS创业公司和厂商在Salesforce的榜样作用下涌入了CRM SaaS赛道。在全球市场&#xff0c;Salesforce是CRM SaaS领域的领导厂商&#xff0c;连续多年占据了全球CRM SaaS第一大厂商地位。然而&#xff0c;Salesforce作为业务类…...

工业镜头接口类型

现有产品主要有以下接口 1、C:最常见的工业相机接口&#xff0c;受限于接口物理尺寸大小&#xff0c;最大靶面目前是4/3” 2、M42:M421.0,2k和4k线阵相机使用 3、M58S:M580.75,大靶面相机使用&#xff0c;可以转C(限于CH080相机&#xff0c;靶面4/3”)&#xff0c;可以转F,可以…...

生产环境中oracle dba权限检查和回收相关命令汇总

一、oracle dba权限检查和回收的作用和意义 在Oracle数据库生产环境中&#xff0c;回收oracle dba权限的作用和意义重大&#xff0c;具体表现在以下三方面&#xff1a; 安全性&#xff1a;回收赋权检查和回收可以确保数据库中的权限控制得到有效管理。通过检查和回收权限&…...

实现微信转账到零钱经验

最近写微信转账到零钱的功能。 微信 商家转账到零钱 一-CSDN博客 微信 商家转账到零钱 二-CSDN博客 除了基本接口处理&#xff0c;也要兼顾系统财务安全&#xff0c;和异常处理情况。中心思想就是实现功能的同时&#xff0c;别给自己找事…… 本次开发在原有基础上二开。采…...

SpringCloud——负载均衡——OpenFeign

Feign是一个声明式的客户端接口&#xff0c;相比RestTemplate&#xff0c;更好的简化了微服务之间的调用方式。而且Feign默认集成了Ribbon&#xff0c;可以实现负载均衡。 1.OpenFeign与Feign OpenFeign在Feign的基础上支持SpringMVC的注解。OpenFeign的FeignClient可以解析Re…...

力扣370周赛

力扣第370场周赛 找到冠军 I 答案即入度为0的点 class Solution { public:int findChampion(vector<vector<int>>& grid) {vector<int>d(1005);int n grid.size() , m grid[0].size();for(int i 0 ; i < n ; i ){for(int j 0 ; j < m ; j )…...

EMNLP2023 | 让模型学会将提示插入到合适的中间层

深度学习自然语言处理 原创作者&#xff1a;cola 现有的提示微调方法基本是人工选择提示层&#xff0c;而人工选择将提示插入到哪些层次并非一定合理&#xff0c;这导致了很大程度上限制提示微调发挥潜能。我们的模型(SPT)可以让模型自己学习应该在哪些中间层插入提示&#xff…...

【PG】PostgreSQL单机部署(简洁命令版)

目录 1 下载安装包 2 上传至需要安装的服务器 3 服务器安装所需依赖包 4 解压安装包 5 配置安装 6 创建用户 7 创建目录修改权限 8 设置环境变量 9 设置共享库 10 初始化 11 启动数据库 12 关闭数据库 13 查看数据库状态 14 连接数据库 1 下载安装包 通过下载…...

AI:69-基于深度学习的音乐推荐

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...

php 使用phpoffice/phpspreadsheet拓展实现导出图片

基础操作参考&#xff1a;https://blog.csdn.net/huaweichenai/article/details/95994006 文档地址&#xff1a;https://phpspreadsheet.readthedocs.io/ github地址&#xff1a;https://github.com/PHPOffice/PhpSpreadsheet 导出插入图片主要使用\PhpOffice\PhpSpreadshee…...

几种解决mfc140.dll文件缺失的方法,电脑提示mfc140.dll怎么办

电脑提示mfc140.dll缺失&#xff0c;如果你不去处理的话&#xff0c;那么你的程序游戏什么都是启动不了的&#xff0c;如果你想知道有什么方法可以解决那么可以参考这篇文章进行解决&#xff0c;今天给大家几种解决mfc140.dll文件缺失的方法。电脑提示mfc140.dll也不用担心解决…...

并发修改异常

并发修改异常&#xff08;Concurrent Modification Exception&#xff09;是指在多线程环境下&#xff0c;当一个方法检测到对象的并发修改&#xff0c;但不允许这种修改时&#xff0c;抛出的一种异常。换句话说&#xff0c;当两个或多个线程同时对一个对象进行修改时&#xff…...

split() 函数实现多条件转为数据为数组类型

使用 split() 函数并传递正则表达式 /[,;.-]/ 作为分隔符来将字符串按照逗号、分号和破折号进行拆分&#xff0c;并将结果赋值给 splitArray 数组。下面是一个示例代码&#xff1a; 在上面的示例中&#xff0c;我们使用 split() 函数将 inputString 字符串按照逗号、分号和破折…...

【Springboot】Vue3-Springboot引入JWT实现登录校验以及常见的错误解决方案

文章目录 前言一、JWT简单介绍二、token校验设计思路三、使用步骤Springboot部署JWT引入依赖&#xff1a;创建登录实体类后端&#xff1a;LoginController.java路由守卫函数 四、问题 前言 项目版本&#xff1a; 后端&#xff1a; Springboot 2.7、 Mybatis-plus、Maven 3.8.1…...

VueCli 自定义创建项目及配置

一、VueCli 自定义创建项目 1.安装脚手架 (已安装) npm i vue/cli -g2.创建项目 vue create hm-exp-mobile选项 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > Manually select features 选自定义手动…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...