経緯
複数のGIFを1つのPDFに変換したかった
調べても有料のものしか見つからなかったけど、iTextSharpを使えばできたので記録に
前提
- GIF画像のサイズは全て同じ
- 動かないGIF画像を想定
ソースコード
// GIF画像のバイト配列が入ったリスト
List<byte[]> gifByteList = new List<byte[]>();
// GIF画像をiTextSharpのImage型に変換してリストに詰める
List<iTextSharp.text.Image>() imageList = new List<iTextSharp.text.Image>();
foreach (var gifByte in gifByteList)
{
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(gifByte);
imageList.Add(image);
}
// GIF画像のサイズでドキュメントを作成
float height = imageList.FirstOrDefault().Height;
float width = imageList.FirstOrDefault().Width;
RectangleReadOnly pageSize = new RectangleReadOnly(width, height);
Document document = new Document(pageSize, 0, 0, 0, 0);
// ドキュメントに画像を挿入
// サイズはピッタリなのでdocument.NewPage()は必要ない
document.Open();
foreach (var image in imageList)
{
document.Add(image);
}
document.Close();
Image.GetInstance()
引数に応じてiTextSharp.text.Image型のインスタンスを作成するメソッド
対応している画像の種類はGIF, JPEG, PNG
オーバーロードもいろいろあるみたいです
以下は一部を抜粋
GetInstance(iTextSharp.text.Image image)GetInstance(Uri url)GetInstance(Stream s)GetInstance(string filename)GetInstance(byte[] imgb)GetInstance(System.Drawing.Image image, BaseColor color, bool forceBW)GetInstance(System.Drawing.Image image, ImageFormat format)GetInstance(System.Drawing.Image image, BaseColor color)
画像をドキュメントのサイズに合わせたいとき
元の画像の比率を変えずに、縦か横をA4サイズのドキュメントの幅いっぱいに合わせたいときは、以下の処理を追加するとよいと思います。
ドキュメントの余白なし
RectangleReadOnly pageSize = PageSize.A4;
Document document = new Document(pageSize, 0, 0, 0, 0);
// 画像サイズ変更
image.ScaleToFit(pageSize);
ドキュメントの余白あり
RectangleReadOnly pageSize = PageSize.A4;
float margin = 35f;
Document document = new Document(pageSize, margin, margin, margin, margin);
// 画像サイズ変更
float width = pageSize.Width - margin * 2;
float height = pageSize.Width - margin * 2;
image.ScaleToFit(width, height);
感想
追加でお金かけないとできないかな、って諦めてたけど試したらできたので良かったです。