写点什么

如何通过 C#和 VB.NET 压缩 PDF 文档

作者:Geek_249eec
  • 2023-03-03
    四川
  • 本文字数:2251 字

    阅读完需:约 7 分钟

当 PDF 文档内容较多,大小较大时,往往不便于日常的保存或者发送。因此,在操作前可以对其进行压缩。Free Spire.PDF for .NET 支持在.NET 平台上压缩 PDF 文档。这一方法将通过压缩文档中的图像和不需要的注释行、空格等内容来压缩文件大小,从而确保文档的完整。这对于包含大量图像内容的 PDF 文档尤为有用。具体的操作及代码请参考以下内容。

程序环境

这个方法将用到的是Free Spire.XLS for .NET组件,支持在多种.NET 应用程序中使用。具体安装方法如下:

方法一

    通过 NuGet 安装 Free Spire.XLS for .NET,具体步骤为:打开 Visual Studio 创建新项目,依次选择工具>NuGet 包管理器>程序包管理器控制台,然后执行以下命令:

    PM> Install-Package FreeSpire.XLS                   

方法二

    在程序中手动引入 Spire.xls.dll 文件,将Free Spire.XLS 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.PdfImports Spire.Pdf.GraphicsImports System.DrawingImports 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 ClassEnd Namespace
复制代码



用户头像

Geek_249eec

关注

还未添加个人签名 2022-07-13 加入

还未添加个人简介

评论

发布
暂无评论
如何通过C#和VB.NET压缩PDF文档_C#_Geek_249eec_InfoQ写作社区