C#でPDFをTiffに変換する

TIFF（Tagged Image File Format）は高画質で知られ、幅広い色深度と解像度をサポートしています。そのため、写真や地図など、忠実さが重要な詳細画像のスキャンやアーカイブに最適です。この記事では、**C#でプログラムでPDFをTIFFに変換する**方法を探ります。

## PDF to TIFFコンバータライブラリ
C#でPDFからTiffへの変換実現するには、.NETアプリケーションでPDFの生成、処理、変換、印刷機能の豊富なセットをサポートする.NETライブラリ – [**Spire.PDF for .NET**](https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html)が必要です。

このライブラリは、以下のリンクからダウンロードするか、[Nuget](
http://www.nuget.org/packages/Spire.PDF/)経由で直接インストールすることができます。

https://www.e-iceblue.com/Download/download-pdf-for-net-now.html


## C#でPDFファイルをTIFFファイルに変換
PDFファイルには複数のページが含まれている場合があります。PDFファイルを複数ページのTiffファイルにしたい場合は、以下の手順に従ってください：
1. **`PdfDocument`** インスタンスの **`LoadFromFile()`** メソッドを使用してPDFファイルを読み込みます；
2. カスタムメソッド **`SaveAsImage()`** を使って、PDFの各ページを画像に変換します；
3. カスタムメソッド **`JoinTiffImages()`** メソッドを呼び出して、変換された TIFF 画像を 1 つの TIFF 画像にまとめます。

**PDFをTiffに変換するためのサンプルC#コード：**
```csharp
using System;
using System.Drawing;
using System.Drawing.Imaging;
using Spire.Pdf;

namespace SavePdfAsTiff
{
    class Program
    {
        static void Main(string[] args)
        {
            // PDFファイルを読み込む
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("Test.pdf");

            // PDFページを画像に変換し、画像配列として保存する
            Image[] images = SaveAsImage(pdf);

            // TIFF画像を複数ページのTIFFファイルに統合する
            JoinTiffImages(images, "Image\\ToImage.tiff", EncoderValue.CompressionLZW);
        }

        private static Image[] SaveAsImage(PdfDocument pdf)
        {
            // 画像配列の作成
            Image[] images = new Image[pdf.Pages.Count];

            // PDFの各ページを繰り返し処理する
            for (int i = 0; i < pdf.Pages.Count; i++)
            {
                // ページを画像に変換する 
                images[i] = pdf.SaveAsImage(i);
            }
            return images;
        }

        private static ImageCodecInfo GetEncoderInfo(string mimeType)
        {
            // 利用可能なすべての画像エンコーダを取得する
            ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
            for (int j = 0; j < encoders.Length; j++)
            {
                // 指定されたMIMEタイプにマッチするエンコーダーを探す
                if (encoders[j].MimeType == mimeType)
                    return encoders[j];
            }
            // 一致するエンコーダが見つからない場合は例外がスローされます
            throw new Exception(mimeType + " mime type not found in ImageCodecInfo");
        }

        public static void JoinTiffImages(Image[] images, string outFile, EncoderValue compressEncoder)
        {
            // 画像エンコーダーのパラメーターを設定する
            Encoder enc = Encoder.SaveFlag;
            EncoderParameters ep = new EncoderParameters(2);
            ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame);
            ep.Param[1] = new EncoderParameter(Encoder.Compression, (long)compressEncoder);

            // 最初の画像をマージ用のベースとして初期化する
            Image pages = images[0];
            int frame = 0;

            // TIFFフォーマットのエンコーダー情報を取得する
            ImageCodecInfo info = GetEncoderInfo("image/tiff");

            // 各画像を反復処理する
            foreach (Image img in images)
            {
                if (frame == 0)
                {
                    // 最初のフレームであれば、それを現在のベース画像に設定する
                    pages = img;

                    // 指定されたエンコーダー・パラメーターを使用して最初のフレームを保存する
                    pages.Save(outFile, info, ep);
                }
                else
                {
                    // 中間フレームの場合、エンコーダー・パラメーターを更新し、新しいページを示す
                    ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);

                    // 中間フレームを保存する
                    pages.SaveAdd(img, ep);
                }
                if (frame == images.Length - 1)
                {
                    // 最後のフレームであれば、エンコーダー・パラメーターをフラッシュしてファイルを閉じる
                    ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
                    pages.SaveAdd(ep);
                }
                frame++;
            }
        }
    }
}
```

.NET PDF APIがサポートするPDF変換・処理機能については、こちらをご覧ください：

https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Spire.PDF-Program-Guide-Content.html