*

[iTextSharp,C#]TifファイルをPDFに変換する。

公開日: : C#, PC, PDF, プログラミング

TifファイルをPDFに変換してほしいと言われて作ったときのソースのメイン部分を抜粋です。

確かFAXのデータをPDFに変換したいんだったかな。
単一の画像だと思い込んでPDF化を作ってて、完成したあとにTiff(Tagged Image File Format)にマルチファイルがあるってことに気づいた思い出。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.codec;

namespace Hoge {
	class ClassHoge {
		void HogeFunction(){
			string inFilePath = @"c:\Hoge\hogeFile.tif";
			string outFilePath = @"c:\Hoge\hogeFile.pdf";

			Document doc = new Document();

			PdfWriter.GetInstance(doc, new FileStream(outFilePath, FileMode.Create));

			doc.Open();
			
			RandomAccessFileOrArray randomAccessFileOrArray = new RandomAccessFileOrArray(inFilePath);
			int page = TiffImage.GetNumberOfPages(randomAccessFileOrArray);

			for (int i = 1; i <= page; i++) {
				iTextSharp.text.Image image = TiffImage.GetTiffImage(randomAccessFileOrArray, i);
				float x = (image.PlainWidth / image.DpiX) * 25.4f * 2.834f;
				float y = (image.PlainHeight / image.DpiY) * 25.4f * 2.834f;

				iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(SelectPaperSize(x, y));

				image.ScalePercent(35f);

				image.SetAbsolutePosition(0f, 0f);

				doc.SetPageSize(rect);
				doc.Add(image);
				doc.NewPage();
			}
			doc.Close();
		}

		private iTextSharp.text.Rectangle SelectPaperSize(float x, float y) {
			iTextSharp.text.Rectangle result = null;

			// スキャン状態によって多少の誤差があるため誤差範囲10%とする
			float error = 0.9f;

			if (PageSize.A0.Height < (y * error)) {
				result = PageSize.B0;
			} else if (PageSize.B1.Height < (y * error)) {
				result = PageSize.A0;
			} else if (PageSize.A1.Height < (y * error)) {
				result = PageSize.B1;
			} else if (PageSize.B2.Height < (y * error)) {
				result = PageSize.A1;
			} else if (PageSize.A2.Height < (y * error)) {
				result = PageSize.B2;
			} else if (PageSize.B3.Height < (y * error)) {
				result = PageSize.A2;
			} else if (PageSize.A3.Height < (y * error)) {
				result = PageSize.B3;
			} else if (PageSize.B4.Height < (y * error)) {
				result = PageSize.A3;
			} else if (PageSize.A4.Height < (y * error)) {
				result = PageSize.B4;
			} else if (PageSize.B5.Height < (y * error)) {
				result = PageSize.A4;
			} else if (PageSize.A5.Height < (y * error)) {
				result = PageSize.B5;
			} else if (PageSize.B6.Height < (y * error)) {
				result = PageSize.A5;
			} else if (PageSize.A6.Height < (y * error)) {
				result = PageSize.B6;
			} else if (PageSize.B7.Height < (y * error)) {
				result = PageSize.A6;
			} else if (PageSize.A7.Height < (y * error)) {
				result = PageSize.B7;
			} else if (PageSize.B8.Height < (y * error)) {
				result = PageSize.A7;
			} else if (PageSize.A8.Height < (y * error)) {
				result = PageSize.B8;
			} else {
				result = PageSize.A8;
			}

			return result;
		}
	}
}

マルチファイルにも対応してます。

ad

関連記事

Delgate Multi Thread

[C#]マルチスレッドとイベントハンドラでデータベースのテーブルの値の変更を検知する。

システム利用中にデータベースの内容が更新 こういったシステムは往々にしてあるかと思います。 特に

記事を読む

logo

[C#,Access]microsoft AccessにODBC接続する

「client AccessのODBC」というタイトルのために、AccessのODBC接続を知りたく

記事を読む

logo

[Unity]コードリファレンス ソケット通信の開始して接続して切断する。

オンラインゲームを作るためにはソケット通信が必要です。 今回はいきなりソースから。解説は下の方に。

記事を読む

addcomp

[Unity]コードリファレンス コンポーネントをアタッチする。

コンポーネントをプログラム実行時に追加します。 AddComponent() AddComp

記事を読む

VisualStudio_

[c++,cpp]C++でじゃんけんをしよう

過去に書いた超くだらないソースを見つけたので衝動的にうp。 C++でじゃんけんをしよう!

記事を読む

wannabenote

[Excel, C#]C#でExcelの値の変更イベントを取得する。

Excelのイベント取得 処理の流れ 対象のワークシートを取得する。 イベントハンドラ

記事を読む

Unity_

[Unity]Unity 2Dチュートリアル スプライトをクリック(タップ)して削除する

前回、スプライトを置くことが出来たのですが、動かせるようにしたいところです。 ドラッグして動

記事を読む

logo1

ヘッダ(仮)を作る

ヘッダを作ります。   いろいろ検索してみると、以下のサイトがよさそう。

記事を読む

wannabenote

[C#, Excel]最終行を取得する

Excelを触っているのでC#でExcelネタが続きます。 Excelの行数が知りたい Exce

記事を読む

Wannabenote

[Unity]Unity2Dチュートリアル パズルを落下させる。

前回の続き。 とりあえず、パズルが消えたので、パズルを落としましょう。 以下のようにソースを

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑