0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#でPDFをTiffに変換する

Posted at

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

PDF to TIFFコンバータライブラリ

C#でPDFからTiffへの変換実現するには、.NETアプリケーションでPDFの生成、処理、変換、印刷機能の豊富なセットをサポートする.NETライブラリ – Spire.PDF for .NETが必要です。

このライブラリは、以下のリンクからダウンロードするか、Nuget経由で直接インストールすることができます。

C#でPDFファイルをTIFFファイルに変換

PDFファイルには複数のページが含まれている場合があります。PDFファイルを複数ページのTiffファイルにしたい場合は、以下の手順に従ってください:

  1. PdfDocument インスタンスの LoadFromFile() メソッドを使用してPDFファイルを読み込みます;
  2. カスタムメソッド SaveAsImage() を使って、PDFの各ページを画像に変換します;
  3. カスタムメソッド JoinTiffImages() メソッドを呼び出して、変換された TIFF 画像を 1 つの TIFF 画像にまとめます。

PDFをTiffに変換するためのサンプルC#コード:

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変換・処理機能については、こちらをご覧ください:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?