【Java】PDFファイルの圧縮

PDF文書を圧縮することで、占有するディスク容量を削減し、文書の共有や転送を容易にします。このほか、PDF文書を圧縮することで、PDF文書をSNSに共有したり、PDF文書をメール送信したりする際に、ファイルサイズの上限を超えることを避けることもできます。本記事では、[Spire.PDF for Java](https://jp.e-iceblue.com/introduce/spire-pdf-for-java.html)を使用して、**PDF文書を圧縮してサイズを小さくする方法**について説明します。
## 依存関係の追加
Spire.PDF for Javaは、[公式サイト](https://jp.e-iceblue.com/download/spire-pdf-for-java.html)から手動でダウンロードしてプロジェクトに導入するか、Mavenで以下のコードを入力してインストールすることが可能です。
```xml
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>9.5.6</version>
    </dependency>
</dependencies>
```
## PDF文書を圧縮してファイルサイズを小さくする
PDF文書のサイズに影響を与える最も重要な要因は画像と埋め込みフォントであるため、画像と埋め込みフォントをメインに文書を圧縮しています。圧縮時に圧縮品質を設定することができます。また、PDF文書のメタデータを削除して、文書のサイズを小さくすることも可能です。ここでは、その詳しい手順をご紹介します。
**ステップ 1**
**PdfCompressor** のオブジェクトを作成し、PDFドキュメントを読み込みます。
```PdfCompressor compressor = new PdfCompressor("サンプル.pdf");```

**ステップ 2**
圧縮オプションを取得します。
```OptimizationOptions options = compressor.getOptions();```

**ステップ 3**
フォントの圧縮を有効にします。
```options.setCompressContents(true);```

**ステップ 4**
メタデータを削除します。
```options.setRemoveMetadata(true);```

**ステップ 5**
画像圧縮オプションを取得します。
```ImageCompressionOptions imageOptions = options.getImageCompressionOptions();```

**ステップ 6**
画像の圧縮を有効にします。
```imageOptions.setCompressImage(true);```

**ステップ 7**
画像のサイズ変更を有効にします。
```imageOptions.setResizeImages(true);```

**ステップ 8**
画像の圧縮品質を設定します。
```imageOptions.setImageQuality(ImageQuality.Low);```

**ステップ 9**
文書を圧縮して保存します。
```compressor.compressToFile("PDFの圧縮.pdf");```

**フルコードの例**
```java
import com.spire.pdf.conversion.compression.ImageCompressionOptions;
import com.spire.pdf.conversion.compression.ImageQuality;
import com.spire.pdf.conversion.compression.OptimizationOptions;
import com.spire.pdf.conversion.compression.PdfCompressor;

public class CompressPDF {
    public static void main(String[] args) {

        //PdfCompressorのオブジェクトを作成し、PDF文書を読み込む
        PdfCompressor compressor = new PdfCompressor("サンプル.pdf");

        //圧縮オプションを取得する
        OptimizationOptions options = compressor.getOptions();

        //フォントの圧縮を有効にする
        options.setCompressContents(true);

        //メタデータを削除する
        options.setRemoveMetadata(true);

        //画像圧縮オプションを取得する
        ImageCompressionOptions imageOptions = options.getImageCompressionOptions();

        //画像の圧縮を有効にする
        imageOptions.setCompressImage(true);

        //画像のサイズ変更を有効にする
        imageOptions.setResizeImages(true);

        //画像の圧縮品質を設定する
        imageOptions.setImageQuality(ImageQuality.Low);

        //文書を圧縮して保存する
        compressor.compressToFile("PDFの圧縮.pdf");
    }
}
```
![PDFファイルの圧縮](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/6c8557d2-38dc-78e4-97fb-8ad0330001b5.png)

> **PDF文書を圧縮してファイルサイズを小さくするだけでなく、[添付ファイルの削除](https://jp.e-iceblue.com/tutorials/java/spire-pdf-java/pdf-java-attachments/java-add-or-remove-attachments-in-pdf.html)や[注釈の削除](https://jp.e-iceblue.com/tutorials/java/spire-pdf-java/pdf-java-annotation/java-remove-annotations-from-pdf-documents.html)など、PDFファイルサイズを小さくする方法もあります。**