如何通过C#和VB.NET程序压缩PDF文档
当PDF文档内容较多,大小较大时,往往不便于日常的保存或者发送。因此,在操作前可以对其进行压缩。Free Spire.PDF for .NET支持在.NET平台上压缩PDF文档。这一方法将通过压缩文档中的图像和不需要的注释行、空格等内容来压缩文件大小,从而确保文档的完整。这对于包含大量图像内容的PDF文档尤为有用。具体的操作及代码请参考以下内容。
程序环境
这个方法将用到的是Free Spire.PDF for .NET组件,支持在多种.NET应用程序中使用。具体安装方法如下:
方法一
通过NuGet安装Free Spire.PDF for .NET,具体步骤为:打开 Visual Studio创建新项目,依次选择工具>NuGet包管理器>程序包管理器控制台,然后执行以下命令:
PM> Install-Package FreeSpire.PDF
方法二
在程序中手动引入Spire.pdf.dll文件,将Free Spire.PDF for .NET 下载到本地,解压并安装。安装完成后,打开 Visual Studio创建新项目,在右边的“解决方案资源管理器”中右键点击“引用”,再依次选择“添加引用”> “浏览”,找到安装路径下BIN文件夹中的dll文件,点击“确定”,将其添加引用至程序中。
具体步骤和代码:
- 创建 PdfDocument 类的对象。
- 使用 PdfDocument.LoadFromFile()方法加载PDF示例 文档。
- 通过将 PdfDocument.FileInfo.IncrementalUpdate 属性设置为 false 来禁用增量更新。
- 设置压缩级别来压缩文档中的内容。
- 遍历文档页面,并使用 PdfImageHelper.GetImagesInfo()方法获取每个页面的图像信息集合。
- 遍历集合中的所有项,并使用PdfImageHelper.ReplaceImage()方法将压之前的图像替换为压缩后的图像。
- 使用 PdfDocument.SaveToFile()方法将文档保存到另一个 PDF文档。
C#:
using Spire.Pdf; using Spire.Pdf.Graphics; using System.Drawing; using Spire.Pdf.Utilities; namespace CompressPdf { class Program { static void Main(string[] args) { //创建PdfDocument 类的对象 PdfDocument doc = new PdfDocument(); //加载PDF示例文档 doc.LoadFromFile(@"sample.pdf"); //禁用增量更新 doc.FileInfo.IncrementalUpdate = false; //设置压缩级别 doc.CompressionLevel = PdfCompressionLevel.Best; //遍历文档页面 foreach (PdfPageBase page in doc.Pages) { //创建PdfImageHelper 类的对象 PdfImageHelper helper = new PdfImageHelper(); //获取图像信息集合 PdfImageInfo[] imagesInfo = helper.GetImagesInfo(page); //遍历图像信息集合 foreach (PdfImageInfo imageInfo in imagesInfo) { //将压之前的图像替换为压缩后的图像 helper.ReplaceImage(imageInfo, CompressImage(imageInfo.Image)); } } //保存至另一个PDF文档 doc.SaveToFile("output.pdf"); doc.Close(); } //通过降低质量来压缩图片 private static PdfBitmap CompressImage(Image img) { PdfBitmap newImage = new PdfBitmap(img); newImage.Quality = 10; return newImage; } } }
VB.NET:
Imports Spire.Pdf Imports Spire.Pdf.Graphics Imports System.Drawing Imports Spire.Pdf.Utilities Namespace CompressPdf Class Program Shared Sub Main(ByVal args() As String) '创建 PdfDocument 类的对象 Dim doc As PdfDocument = New PdfDocument() '加载PDF示例文档 doc.LoadFromFile("sample.pdf") '禁用增量更新 doc.FileInfo.IncrementalUpdate = False '设置压缩级别 doc.CompressionLevel = PdfCompressionLevel.Best '遍历文档页面 Dim page As PdfPageBase For Each page In doc.Pages '创建PdfImageHelper 对象 Dim helper As PdfImageHelper = New PdfImageHelper() '获取图像信息集合 Dim imagesInfo() As PdfImageInfo = helper.GetImagesInfo(page) '遍历图像信息集合 Dim imageInfo As PdfImageInfo For Each imageInfo In imagesInfo '将原图像替换为压缩后的图像 helper.ReplaceImage(imageInfo, CompressImage(imageInfo.Image)) Next Next '保存至另外一个PDF文档 doc.SaveToFile("output.pdf") doc.Close() System.Diagnostics.Process.Start("output.pdf") End Sub '通过降低质量来压缩图像 Private Shared Function CompressImage(ByVal img As Image) As PdfBitmap Dim NewImage As PdfBitmap = New PdfBitmap(img) NewImage.Quality = 10 Return NewImage End Function End Class End Namespace
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)