如何通过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