宮坂 優大
株式会社ミガロ.
システム事業部 システム1課［Delphi/400］

FastReportを活用した電子帳票
作成テクニック●はじめに●FastReport を使用した電子帳票化●電子データ印の作成●電子帳票への押印機能実装●まとめ略歴1982 年 11 月 19 日生まれ
2006 年 近畿大学 理工学部卒業
2006 年 4 月 株式会社ミガロ. 入社
2006 年 4 月 システム事業部配属
現在の仕事内容
主に Delphi/400 を利用したシステムの受託開発と MKS サポートを担 当。Delphi お よ び Delphi/400のスペシャリストを目指して精進する毎日である。

1.はじめにわせる必要があったり、社内システムとの連携が難しいこともある。

本稿では、社内ワークフローで使用さ基幹システムの構築では帳票機能がそのため自社用のシステムを開発・運れる購入申請書をテーマに、FastReport

不可欠であるが、最近ではプリンタに紙用している場合は、そのシステムのなかを使用して電子帳票（画像ファイル）をで出力する従来の帳票機能ではなく、電で電子帳票を実装する要望が多い。電子作成する。作成する購入申請書フォー子帳票での開発も増えてきた。

帳票の開発には技術的にハードルの高い

マットは、【図 1】に示す。

電子帳票化を実現する場合、一番の目イメージがあるが、Delphi/400 ではツー

Delphi/400 XE7 と FastReport を 使

的はコスト削減であることが多い。電子ルの機能を活用して容易に実現できる。

用して、以下のように電子帳票を作成し化によって用紙はもちろん、トナーなど

本稿では電子帳票化テクニックとしプリンタ関連の消耗品にかかるコストて、帳票を画像ファイルで出力する方法や、その運用・保守費用を削減できる。と、電子帳票でとくに要望が多い電子帳票の保管や閲覧がシステム上で行えるデータ印を押印する手法について説明しと、物理的なスペース制約や帳票紛失のていく。

トラブル解決にもつながるので、業務的

なお電子帳票には pdf 形式や画像形ていく。
2-1. 帳票フォーマットの作成
電 子 帳 票 作 成 の 準 備 と し て、印 刷フォームに TfrxReport コンポーネントを貼り付ける。
【図 2】

式があるが、本稿では画像加工のテク

次に、レポートデザイナを使用して帳また電子帳票であれば、ネットワークニックを扱うため画像形式を題材として票フォーマットを作成する。レポートデを通じて取引先にデータとして渡せるのいる。もちろん Delphi/400 では、pdfザイナを起動するには、Delphi/400 ので、BtoB などで必要とされることも多の出力も可能である。

なメリットは大きい。

から紙帳票として印刷もできる。総じてデメリットは少ないといえる。
電子帳票の実現に際しては、専用の開発画面に貼り付けた TfrxReport コンポーネントをダブルクリックする。
【図 3】い。もちろん必要に応じて電子ファイル102である。

2.FastReportを使用した電子帳票化

パッケージソフトを導入する場合も多い

FastReport と は、Delphi/400 XE3が、ソフトの仕様に帳票書式や業務を合以降で新しくバンドルされた帳票ツール

レポートデザイナを起動したあとは、
自 由 に 線（Line）、 枠（Shape）、文字（Memo）を使用してデザインする。
まずは線を引き、レイアウトのイメージを作成する。

図1

103

レポートデザイナの左側にあるコン

次に、帳票で実際の変数値をセットすラムが作成された。保存したあとは、帳ポーネントパレットから描画を選択し、る。帳票フォーマット作成時に変数とし票表示用の画面を起動し、購入申請書のポップアップから線オブジェクトを選択て宣言した［VALUE001］に値をセッ

電子帳票を画面表示できる（これも帳票する。マウスでドラッグ＆ドロップする

ト す る 場 合 は、Script.Variables［（変が電子ファイルであるメリットといえだけで、簡単に線を引ける【図 4】。線数名）］を指定する。
【ソース 2】

る）
。
【図 9】

オブジェクトは縦もしくは横にしか引け

もちろん IBM i や SQLServer などの

また電子帳票でも紙の帳票と同じよないので、斜めの線を引く場合は対角線データベースから取得した値を設定する

うに、押印を必要とすることが非常に多を使用する。

ことも可能である。

い。そこで次に、電子データ印を作成し、次に固定文字列を貼り付ける。固定文

データベースや配列を扱う方法につ字列をレイアウトに貼り付けるには、テ

いては、2014 年発行のミガロ . テクニカ

明する。

キストオブジェクトを使用する。

ルレポート№ 7 にある『FastReport を【図 9】のプログラム例では、表示さコンポーネントパレットからテキス使用した帳票作成テクニック』で詳しくれた電子帳票の下にある「確認印」ボタ

トオブジェクトを選択し、文字を貼り付説明しているので、参考にしていただきンを押すことで、電子データ印を生成し、けたい箇所をマウスでクリックする。そたい。

マウスで好きな位置に貼り付けられるよこでテキストを入力するダイアログが起

ここまでで、帳票への出力内容が完成動するので、テキストタブに出力したいしたので、次に帳票を画像ファイルとし文字列を入力する。
【図 5】て保存する手法を説明する。

日付や名前、データベースから取得する値を設定する場合も、固定文字列と同じようにテキストオブジェクトとして貼り付ける。

2-3. 帳票画像ファイルの保存
通常、FastReport で作成した帳票は「frxReport1.Print」メソッドを使用し、この電子帳票に押印するテクニックを説うにしている。

3.電子データ印の作成
電子データ印といっても、内容としてはデータ印を画像として作成するだけである。

また、ダイアログ内で任意の変数をプリンタへ印刷する。しかし本稿では電電子データ印作成の手順としては、ま［変数名］と記述することで、文字列を子帳票として出力するので、画像ファイずデータ印の枠、文字列を画像ファイルプログラム内の変数として扱える（ソールとしての保存方法を説明する。画像として作成する。そして 2 つの画像ファスは後 述 ）。た と え ば、［VALUE001］

ファイルの形式は、一般的に JPEG の使イルを 1 つに合成することで、電子デーのように設定できる。
【図 6】

用が多い。

タ印として完成する。この手法で電子フッター部備考の下ラインは、破線でFastReport で帳票を JPEG 画像ファイ設定する。破線で設定するには、該当のルとして出力するには、TfrxJPEGExport

線オブジェクトを選択し、「Frame ｜コンポーネントが使用できる。

Style」プロパティを fsDot で設定する。
【図 7】

押印に使用できる。
3-1 電子データ印枠の作成

ントを画面に貼り付ける【図 8】。次に、最初に、2 つの TBitmap コンポーネ

最後に線オブジェクトとテキストオ

TfrxJPEGExport コンポーネントにプントを配置する。1 つは電子データ印のブジェクトを組み合わせて、フォーマッロパティを設定する。保存する画像品質

枠用（bmpBase1）、もう 1 つは電子デートを作成していく。一通り帳票レイアウ

は、「Resolution」を指定する。
【ソース 3】

タ印に出力する出力日、名前、所属部署

トの設計が完了すれば、そのままレポー

帳票を出力するメインのロジックは、など文字列用（bmpOver1）として使用

トデザイナを「×」ボタンで終了する。

【ソース 4】のとおりである。画像ファ

これで帳票フォーマットは作成でき

イルは Stream 形式を使って出力する。

そして TImage コンポーネントを配たので、次にボタンを押下した際の出力

ポ イ ン ト は、TfrxJPEGExport の置し、マウス操作で表示する電子データロジックについて説明する。

Stream に msJPEG として内部生成した印のプレビュー用（imgEditor）として「TMemoryStream」を割り当てる点で使用する。

2-2. 帳票データの出力104

まず、TfrxJPEGExport コンポーネ

データ印を作成すれば、電子帳票上でのある。

する。

bmpBase1 と bmpOver1 はプログラ

前述のように作成した帳票フォー

あとは、TfrxJPEGExport コンポー

ム 内 で 生 成 し、imgEditor は TImage

マットでは、変数として「VALUE001」

ネントを TfrxReport コンポーネントのコンポーネントを画面に貼り付ける。

を宣言しているが、帳票出力時には注意

Export メソッドを使用して、msJPEG【図 10】が必要である。変数を宣言している場合に画像ファイル情報を転送する（【ソー

まずは電子データ印の枠色、線の太さには、必ず値を設定しておかねば、実行

ス 4】の①）。最後に、転送された画像ファを設定する。Ellipse メソッドを使用し、時にエラーとなる。

イルを SaveToFile で任意の場所に保存

bmpBase1 に円を描画する。さらに、なそ の た め、初 期 化 ロ ジ ッ ク と し てできる（【ソース 4】の②）。これで電子かにある 2 本線を追加で描画する。
【ソー

InitVariables という手続きを作成し、帳票としての出力・保存が完成である。

ス 5】

文字型であればブランクを設定し、それこれにより、購入申請の情報を画面でこれで、電子データ印の枠が完成であ以外の型であれば 0 を設定しておくと、入力し、「購入申請書を発行」ボタンをる。次に、この枠のなかに出力する文字値の設定漏れを防げる。
【ソース 1】

押すと、電子帳票として保存するプログ列の作成ポイントを説明する。

図2

図3105

3-2 出力文字列の作成印の画像ファイルの完成である。

票ファイルの高さに設定し、押印する電電子データ印内に出力する文字列は、補足として、この電子データ印を画面子データ印を設定する。bmpOver2 は内容としてはただの文字であるが、画像上で押印する際に、マウスでわかりやす

Assign メソッドを使用すれば、電子デー化するため、フォントサイズや幅などのく表示する方法を説明する。

タ印画像を設定できる。
【ソース 12】調整が重要になる。出力する文字列の内まずプレビュー用 TImage コンポー

容は、上段に所属部署、中段に日付、下ネント（imgEditor）の Picture プロパ段に名前である。
【図 11】

ティに電子データ印を読み込ませる。こ最 後 に、bmpBase2 の StretchDraw

まず、上段に表示する所属部署の文字

こからはマウスが画面の帳票内にある場メソッドを使って、bmpOver2 の押印列を調整する。長い部署名になると、電合のみ、マウス位置に電子データ印を表を実装する。これは電子データ印自体を子データ印の枠からはみ出すので、文字示する動作を実装していく。
【図 13】

作成するときと同じ手法で、画像ファイ列の長さによってフォントサイズを変更する必要がある。
このプログラムでは、半角 8 文字ま

こ の マ ウ ス の 動 作 は MouseMove、MouseLeave イ ベ ン ト を 使 う こ と で、簡単に実装できる。
【ソース 10】4-2 電子押印機能の実装

ル同士を合成する。
あとは押印した電子帳票を出力する
TImage コンポーネントで読み込めば、で出力できるように調整している。半角

これで電子データ印の画像ファイル処理が完了である。
【ソース 13】【図 15】

1 〜 6 文字ならフォントサイズ 15、半と、押印する際の画面動作プログラムをこれで電子帳票の作成、およびそれを角 7 〜 8 文字ならフォントサイズ 11 を実装できた。

応用した電子データ印の押印機能を実装

4.電子帳票への押印機
能実装【ソース 14】に実装ソース例をまとめて設定する。これは電子データ印のサイズや、出力する文字列の想定によって変わってくる。
フォントサイズを決定したあとは、できた。ここまでの処理ロジックは、いるので、参考にしていただきたい。
社内システムでは、このような電子帳

Canvas.TextOut で文字列を出力する。

2. で電子帳票の画像ファイルを作成

票を申請データとして保存し、ワークフ

第 1 引数は X 座標の位置、第 2 引数はし、3. では電子帳票に押印する電子デー

ローとして承認者がさらに押印する仕組

Y 座標の位置、第 3 引数は出力する文字タ印の画像ファイルを作成した。ここかみを構築することもできる。

列を指定する。X 座標の位置は、出力すらは、
この 2 つの画像ファイルを合成し、る文字列の長さによって調整する。
【ソー

電子帳票上での押印を実現していく。

ス 6】
次は、中段に表示する日付の文字列で4-1 画像合成の準備

5.まとめ
本稿では FastReport で電子帳票を作ある。日付については、「YYYY/MM/画面の帳票上でのマウス動作処理ま成する方法や、データ印画像の作成方法、DD」形式の半角 10 文字固定で出力すでを作成したが、さらにクリックした際、電子帳票にデータ印を押印する方法を説るので、フォントサイズの調整は不要でその電子帳票と電子データ印の画像ファ明してきた。ここで紹介したテクニックある。
【ソース 7】イルを合成する処理を行う。
【図 14】

を利用すれば、売上伝票や請求書、また最後は、下段に表示する名前の文字列

この処理のために、2 つの TBitmapを調整する。電子データ印に表示する名コンポーネントと 1 つの TJPEGImage

前は、所属と同様にフォントサイズを調

コ ン ポ ー ネ ン ト を 用 意 す る。2 つ の画像や描画は一般には難しいプログ

整し、bmpOver1 の Canvas に出力する。

TBitmap コンポーネントのうち、1 つラム分野であるが、FastReport が画像【ソース 8】は電子帳票用（bmpBase2）、もう 1 つ出 力 形 式 に 対 応 し て い る の で、は電子データ印用（bmpOver2）、またDelphi/400 では簡単に電子帳票を実装

TJPEGImage コンポーネントは JPEGできる。

これで電子データ印に出力する文字列の調整が完了である。

ファイルとして取り扱うために使用する
3-3 電子データ印画像の作成（jpgBase2）。

る。

冒頭でも述べたとおり、電子帳票化にはメリットも多く、FastReport では開ここまでの作業で、 電子データ印のはじめに、電子帳票ファイルが JPEG発にも手間がかからない。帳票を開発す枠（bmpBase1）と電子データ印の文字形式かどうかをチェックする。JPEG 形る際には、電子帳票での出力も、主機能列（bmpOver1）が準備できた。この 2式だった場合には、Bitmap へ変換するの 1 つとして組み込む価値が十分にあるつを合成することで、電子データ印が完ために jpgBase2 に読み込み、その後、技術といえる。

成する。
【図 12】

合成用に bmpBase2 へ再度読み込ませ画像を合成するには、StretchDrawる。Bitmap 形 式 の 場 合 は、 直 接メソッドを使用する。画像ファイルの合bmpBase2 に読み込ませる。
【ソース 11】

成 は、単 純 に bmpBase1 の Canvas にJPEG、Bitmap 以外の画像ファイル

bmpOver1 を 描 画 す る だ け で あ る。

を扱う場合は、いったん WICImage 型【ソース 9】に読み込み直し、bmpBase2 にセット

これで 2 つの画像ファイルを 1 つの画像ファイルに合成できた。電子データ
106

商品画像等の電子帳票の作成も可能であすることで対応する。
次に bmpBase2 の幅、高さを電子帳M

図4

図5107

図6

図7108

ソース1

ソース2109図8

ソース3110

ソース4111

図9

図10112

ソース5

図11

ソース6113

ソース7

ソース8

図12114

ソース9

図13115

ソース10

図14116

ソース11

ソース12

ソース13117

図15118

ソース14119