logo logo_banner

ASP の最近のブログ記事


会社のイントラネットに簡単な送付状システムをASPで構築していますが、

印刷用にレイアウトしてあるHTMLで内容を表示して印刷しています。

ところが、HTMLのレイアウトだと会社のロゴや広告などの画像が72dpi程度でしが出力されないため、ガタガタに印刷されます。

そこで、PDFであれば画像もキレイに出力できるはず!?

ということで、PDFで出力できるようにしてみました。

 

必要なもの

 

必要な作業

  • FdfAcx.dllFdfTk.dllをサーバーのsystem32フォルダにコピー
  • コマンドプロンプトでレジストリにFdfAcx.dllを登録
    C:\winnt\> cd \winnt\system32      ←コピー先に移動
    C:\winnt\system32> regsvr32 FdfAcx.dll ←レジストリーに登録
    

ASPのソースサンプル

Dim FdfAcx,resFDF

'FDF ActiveX オブジェクトの定義
Set FdfAcx = Server.CreateObject("FdfApp.FdfApp") 

'新しいFDF生成
Set resFDF = FdfAcX.FDFCreate

'PDFフォーム欄と値
resFDF.FDFSetValue "atena","株式会社◯◯御中",False
resFDF.FDFSetValue "naiyo","お世話になります。",False
 
'テンプレートPDFのURL(フルパスが望ましい)
resFDF.FDFSetFile "http://192.168.XX.X/soufujyou/print.pdf" 

'設定結果のFDFをファイル名を付けてクライアントでダウンロード
Response.ContentType = "application/vnd.fdf" 'MIMEタイプ FDF
Response.BinaryWrite resFDF.FDFSaveToBuf 'FDFデータをバッファーに出力


'クローズ
resFDF.FDFClose
set resFDF = nothing
set FdfAcx = nothing

テンプレートとなるPDFに宛名を表示する「atena」と、送付状の内容を表示する「naiyo」と名前を付けたフォームを埋め込み、上記のソースにアクセスすれば値が入力されたPDFが表示されます。

ここまでできれば、あとはデータベースや入力フォームからの値を表示したりと便利に改造できます。

動的に画像を表示したりするには、また少し違うやり方をしないといけないようです。

 

参考サイト

トラックバック(0)

トラックバックURL:


イントラネットで表示されているページを印刷しようとすると、

A4・で印刷したいのに、デフォルトはA4・になっているため、

印刷設定を毎回「」に変更しなくてはならない事にガマンの限界が...。

 

Windowsサーバーなので、

イントラネットはIIS上のASPで作っており

一部PHPを使っています。

 

印刷設定(用紙設定)はASPやJavascriptの関数があるんかな?

といろいろ検索しましたが見つかりませんでした...。

 

しかし、替わりに見つけたのはActtiveXコントロール「ScriptX」を使った方法!

まず以下のページで「Dowload smsx.cab」ボタンを押してダウンロード

任意のディレクトリにアップロード

印刷設定を使うページに以下のコードを挿入し、

<object>タグでActiveXコントロール読み込む。

<!-- ScriptX 読み込み -->
<object id=factory style="display:none"
 classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
 codebase="http://**smsx.cabを設置した場所のパス**/smsx.cab#Version=6,5,439,72(←バージョンによって書き換える)">
</object>
<!-- ScriptX 読み込み -->

次にJavascriptファンクションで印刷設定を行う。

<script type="text/javascript">
	function printWindow() {
		factory.printing.header = "ヘッダ名";
		factory.printing.footer = "フッタ名";
		factory.printing.portrait = false; // 用紙方向 true: 縦 false: 横
		factory.printing.leftMargin = 1.0;
		factory.printing.topMargin = 1.0;
		factory.printing.rightMargin = 1.0;
		factory.printing.bottomMargin = 1.0;
		factory.printing.Print(false); // 印刷実行 ture: 印刷ダイアログなし false: 印刷ダイアログあり
}
</script>

あとはファンクションを呼び出すだけでOK!

 <input type="button" value="ScriptXで印刷" onclick="printWindow();" />
自分の場合は印刷ページ表示と同時に印刷するので、
 <body onload="printWindow();" />

としました。

 

※初回使用時は「ActiveXをインストールしますか?」見たいな警告が出ますが、インストールしてしてください。

 

その他

ヘッダ・フッタに、現在日・ページ数出力

factory.printing.header = "ヘッダ名 &b 日付: &d";   // 現在日出力
factory.printing.footer = "フッタ名 &b &p/&P ページ";     //   ページ数出力

これでイントラネットとインターネットでヘッダー・フッター印刷を切り分けられそうなのがいいです。

ヘッダーとフッターで使える記号

  • &w : 印刷するホームページのタイトル
  • &u : 印刷するページのアドレス
  • &d : 現在の日付(xxxx/xx/xx 形式)
  • &D : 現在の日付(xxxx年xx月xx日 形式)
  • &t : 現在の時刻(コントロールパネルの「地域」で設定されている形式)
  • &T : 現在の時刻(xx:xx:xx 形式)
  • &p : 現在のページ番号
  • &P : 総ページ数
  • &b : 右揃えの文字列(「&b」に続けて文字列を入力)
  • &b&b : 中央揃えの文字列(最初の「&b」に続けて文字列を入力)と右揃えの文字列(2 番目の「&b」に続けて文字列を入力)
  • && : アンパサンド(&)

 

直接印刷(印刷ダイアログ表示なし)だけを直接使う

factory.printing.Print(true);

 

プレビュー画面を表示

factory.printing.Preview();

 

ActiveXコントロールだけにWindowsサーバー上じゃないと動かないとは思うのですが、

WindowsサーバーであればIISじゃなくてもApatchでも動き、

<object>タグで「smsx.cab」さえ読み込めばPHPでも使えるようなことが書かれたページがありました。

 

有償版もあるようですが、用紙サイズの指定とかもできるみたいです。

トラックバック(0)

トラックバックURL: