2004年12月03日

PDFをフリーソフトで出力する

PDF連携

magicアプリからPDFを出力するには、どうすればよいか書いて行きます。

クライアントPCからの出力は簡単でPDFライターをインストールして出力するだけです。
アプリケーションサーバーサイドで出力するには、マルチスレッドも意識しなければなりません。ここではサーバーでの出力を中心に書きます。

PDF出力の方法は2種類

1.既成のPDFライターを使う。

2.自分で出力する。

上記、1は最近いろいろなソフトが出回ってます。

メジャーどころ

acrobat
これは、クライアントPC(XP)ではacrobatライターが自動でインストールされます。

サーバーOSではライターはインストールされずディスティラーがインストールされます。

PDFができるまでの流れは
PC→サーバーサイドのmagic→acrobatでPS出力→ディスティラーでPSをPDF変換って、流れに
なります。

クライアントで出力は、単純にプリンタに設定するだけでOKなのですが、
サーバー側のディスティラーはポストスクリプトしか出力されませんでした。

ポストスクリプトをPDFに変換するのにはディスティラーでファイルを常駐監視して
変換する必要があります。

通常、ディスティラーはサービスでは動かないので、強制ログオンするか
サービスに登録する必要があります。

skyPDF
有償ですが、マルチスレッドに対応しています。
クライアントPCと同じような設定で、サーバーサイドでPDFを作成できます。

その他、primoなど
フリーのPDFライターが腐るほど出回ってきました。
印刷が日本語対応していないもの、印刷結果が汚いものいろいろあります。
クライアントでPDF出力ならば、フリーでも十分ではないかと思います。

その他はここ

pdf全体図

をまずご覧ください。クリックすると拡大します。

@HTTPPOST関数でサーバー側のMAGICを起動する。
※ サーバーのMAGICが起動中(@⇔C)にカーソルが矢印から砂時計にならない
※ サーバーのサーバーが動作しない時、エラーメッセージを出力する。
1.サーバーが起動していない時
2.MAGICのMRBが起動していない時
3.MAGIC APPLICATION SERVERが起動していない時

APostScriptsにより帳票をPS形式で出力する。
BGhostScriptsによりPS形式をPDF形式に変換する。C:\temp\ps2pdf.batを起動する(C:\gs\gs7.07\bin\gswin32c.exe)
CPDF作成後、プレビュー画面を起動する。
DActiveXでPDFを画面に表示する。

って、のが大まかな処理の流れです。

今回はmagic Application serverのliteって製品ですので、httppost関数で
サーバー側のmagicを起動しています。

正規版は、リモートコールでもっと簡単にできます。

まず、変数を2つ用意します。
1.pdf名(文字型)(生成されるPDF名になります)
2.blob(blob型)(httppost関数で使用)

次にこの例では(クリックで拡大)

pdf2

行2、HTTPPOST関数でサーバー側のmagicを起動しても砂時計にならないのでカーソルを無理からに砂時計にしています。

行3、はhttppost関数でサーバー側のmagicを起動しているのですが、この関数は項目更新で使います。

式9は
HTTPPost ('http://111.111.111.111/magic94scripts/mgrqispi94.dll','appname=受発注システム(DEV)&prgname=testhttppost&arguments=-N'&Trim (Str (B,'6P0'))&',-A'&Trim (F)&',-A'&Trim (K),L)ってな感じでwebプログラムをコールするように記述してます。

要するにISAPIを使ったコールしています。

行4はサーバーサイドの処理が終わったあとカーソルを矢印に戻しています。

行6のエラーはテスト用に入れています。httppost関数の戻り値をメッセージ出力してます。(本番でははずします)

行8はpdfファイルがうまく作られたかどうかioexist関数でチェックしてます。

行9はうまくいかなかった時、エラーを出力しています。
うまくいかないときの原因は
1.渡しているパラメータがちがう
2.サーバーがダウン
3.magicがダウン
4.MRBがダウン
など考えられます。

行12はサーバー側で作られた注文書(PDF)をクライアントで表示するためのPGMを起動しています。

行15、16はこのPGM(一覧)を再描画するためにしています。
(ほかの方法があるかも)


PDFって?どうやって作られるか知らない方は

http://www9.plala.or.jp/trueroad/pdf-make/

http://www.swa.gr.jp/u-note/ps2pdf.html

をまずご覧ください。ようするに

Distiller でも PDF 作成には、いったん PostScript ファイルが作成され、それを PDF に変換しています。その工程が自動化されていて、ユーザの目に触れないようになっているだけです。

事前に、サーバーにpostscriptsとゴーストスクリプトはインストールしてください


サーバー側の帳票出力は親子のタスクで作ってます

親側
pdf3

子側
pdf4

親タスクでは帳票PGMを呼びだしています。

その後、PostスクリプトをPDF変換するのにゴーストスクリプトを呼び出しています。
(行5です。)

子タスクでは
帳票を出力
そのときのプリンターは
pdf5
でインストールしたポストスクリプトドライバーになります。

ようするに
子タスクでポストスクリプトを出力し親タスクでPSからPDFに変換しています。

親タスクでpsからPDFに変換するときは
gswin32c.exeを使います。

http://www9.plala.or.jp/trueroad/pdf-make/

http://www.swa.gr.jp/u-note/ps2pdf.html

で紹介されているコマンドはマルチスレッド対応ではありませんので、exeをOSコマンドで呼び出して使います。
(パラメータが必要なためバッチファイルを作成しています)

バッチファイルの内容は
cd C:\gs\gs7.07\bin
でディレクトリ変更し
gswin32c -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite -sOutputFile=%2 -dCompatibilityLevel#1.4

で呼び出してます。gswin32cのパラメータの詳細は英語マニュアルです。


Cpdfの確認

重複しますが、

pdf6

の行8でpdfができたかどうかチェックし
OKならプレビュー画面を表示しています。

変数をactivex型で1つ用意します。

pdf7

変数のタイプライブラリはacrobat controlってのを選びます

pdf8

その変数を画面に貼り付けます。


pdf9


どうでしょう?画面に自己顕示欲まるだしのアドビのアクロバットマークが
並んだactivexが張り付いたでしょうか?

ここでアドビのaciveXが出なかったり、選ばれない場合はacrobatreaderをPCにインストールしていなかった自分を呪いましょう。


では、最後にactivexに作成したPDFファイルのパス+名を渡します。

pdf10

タスク前処理でコールコマンドのcomってやつをよびだします。

パラメータはsrcでpdf名を渡せばいいです。





動作環境
win2003server
magicv9-plus-sp3a
database パーベーシブ

ってところです。
タグ:dbmagic PDF acrobat
posted by dbmagic at 15:13 | TrackBack(0) | 他ツールやアプリとの連携
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/1182498

この記事へのトラックバック