大きな PDF ドキュメントは、電子メールで PDF ファイルを転送したい場合や、限られたストレージ容量のデバイスに PDF ファイルを保存したい場合など、すべての場合に適用されません。その時、PDF ファイルのサイズを圧縮することは、この問題を解決するための完璧な方法かもしれません。この記事では、Spire.PDF for .NET を使用して、C# および VB.NET でプログラムによって PDF ファイルを圧縮する方法を示します。
ここでは、画像、フィールド、コメント、ブックマーク、添付ファイル、埋め込みフォントを削除することによって PDF サイズを小さくすることには触れません。
Spire.PDF for .NET をインストールします
まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.PDF
PDF ファイルのコンテンツと画像を圧縮する
次の手順は、Spire.PDF for .NET を使用して PDFファイルを圧縮する方法を示しています
- PdfDocument クラスのオブジェクトを作成する
- PdfDocumentLoadFromFile() メソッドを使用して、PDF ドキュメントをロードする。
- PdfDocumentFileInfo.IncrementalUpdate の属性を false に設定して incremental update を無効にします。
- 圧縮レベルを「最適」に設定して、ドキュメントのコンテンツを圧縮します。PdfCompressionLevel の例から他のいくつかのレベルを選択できます。
- ドキュメント内のページをトラバースし、PdfImageHelper.GetImagesInfo() メソッドを使用して、各ページの画像情報セットを取得します。
- コレクション内のすべてのアイテムをトラバースし、PdfImageHelperReplaceImage() メソッドを使用して、各ピクチャを圧縮ピクチャに置き換えます。
- PdfDocumentSaveToFile() メソッドを使用して、ドキュメントを保存します。
- C#
- VB.NET
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;
}
}
}
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
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。