*

[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

関連記事

logo

[C#]AS400のメンバーを指定してデータにアクセスする

◆前提条件◆ CliantAccessをインストールしている。 .NET Framework3.

記事を読む

visualstudio_

[visual studio]ODBC等のConnection Stringの簡単な作り方

Connection Stringって大体いつも検索して、それを使ってみて、だめだったりOKだったり

記事を読む

unity pazzle

[Unity]Unity2D 番外編 消してちょっと待つ(コルーチン利用)

>タイルを再生成するときに消えたというのがわかるように、時間をおいて生成させることは可能ですか?

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色で繋がったパズルを消去する

前回の続き。 前回で横に同じ色がある場合は消去できるようになりました。 テトリスとぷよぷよを足し

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 番外編 これパズドラじゃなくね?

前回の続き。 パズドラみたく直線で3つ以上連なっているときに消したいんです。 そして、何を勘

記事を読む

Wannabenote

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

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

記事を読む

VisualStudio_

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

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

記事を読む

VisualStudio_

[.NET,C#]visual studio communityで開発環境を作ってプログラムの実行まで

そういえば、visual studioのPro相当の開発環境、visual studio commu

記事を読む

unity

[Unity]コードリファレンス GameObjectを親子関係にする。

親子関係にして、親が動いたら子も動くような動きをさせます。 transform.parentプ

記事を読む

Unity1_5

[Unity]Unity2Dで3マッチパズルを作ろう~インストール編~

Unityの2D機能で3マッチパズルでも作ろうかと思ったのですが、ほとんど資料がない。Unity

記事を読む

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 ↑