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

 

posted @ 2023-03-03 14:32  Gia-  阅读(501)  评论(0编辑  收藏  举报