導入
PDFを圧縮することで、ファイルサイズを小さくし、アップロードや送信、保存をより速く行うことができます。また、ハードディスクの容量も節約できます。大量のPDF文書を頻繁に処理する必要がある場合、例えばファイルアーカイブ、電子メール転送、およびネットワーク共有などの場合、PDFを圧縮する機能を使用することで、作業効率と使いやすさを大幅に向上させることができます。したがって、この記事では、.NETプログラムを使用してPDF文書を圧縮する方法について説明します。サンプルコードには、C#およびVB.NETが含まれます。
準備
- Free Spire.PDF for .NET
- Visual Studio 2022
Free Spire.PDF for .NETをインストールします。
方法1:NuGetでFree Spire.PDF for .NETをインストールする
Visual Studioを開いて新しいプロジェクトを作成します。次に、「Solution Explorer」で「References」を右クリックし、「Nuget Manage Packages」を選択します。Free Spire.PDF for .NETを検索してインストールします。
方法2:手動でSpire.PDF.dllを追加する
Free Spire.PDF for .NETをローカルにダウンロードしインストールします。次に、Visual Studioて新しいプロジェクトを作成し、右側の「Solution Explorer」で「References」を右クリックし、「Add Reference」>「Browse」を選択して、インストールパス下のBINフォルダのdllファイルを見つけ、「OK」をクリックして、プログラムに参照を追加します。
サンプルコード
まず、PdfDocumentオブジェクトを作成し、sample.pdfという名前のPDFファイルをロードします。次に、インクリメンタル更新を無効にし、最適な圧縮レベルを設定します。その後、すべてのページを順番にループ処理し、各ページ内の画像情報を取得し、圧縮された新しい画像で置き換えます。最後に、新しいPDFファイルをoutput.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");
// incremental updateを無効にする
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")
' incremental updateを無効にする
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