0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【C#】iTextSharpを使って複数のGIFを1つのPDFに変換する

Posted at

経緯

複数の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
オーバーロードもいろいろあるみたいです
以下は一部を抜粋

  1. GetInstance(iTextSharp.text.Image image)
  2. GetInstance(Uri url)
  3. GetInstance(Stream s)
  4. GetInstance(string filename)
  5. GetInstance(byte[] imgb)
  6. GetInstance(System.Drawing.Image image, BaseColor color, bool forceBW)
  7. GetInstance(System.Drawing.Image image, ImageFormat format)
  8. 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);

感想

追加でお金かけないとできないかな、って諦めてたけど試したらできたので良かったです。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?