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ファイルにしたい場合は、以下の手順に従ってください:
-
PdfDocument
インスタンスのLoadFromFile()
メソッドを使用してPDFファイルを読み込みます; - カスタムメソッド
SaveAsImage()
を使って、PDFの各ページを画像に変換します; - カスタムメソッド
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変換・処理機能については、こちらをご覧ください: