FAXサーバーを作るに当たってクリヤーしなければならない問題が何個かあったので、ここに解決した方法を書きます。
(1)Access2007のレポートイメージをどうやってデータ化するか
請求書はAccessから直接FAX番号を渡してR社の複合機で送っていました。今度は「まいとーくFAX」にFAX前イメージとしてデータを渡してやらなければなりません。
まず、考えたのはイメージをPDFファイルとして渡す方法です。この方法を調べていると、
PDF Writer(bioPDFSetup_7_2_0_1304)に行き当たりました。
http://www.biopdf.com/index.php
このプログラムはGhostscript(Version=8.70)を使ってPDF化します。PDFだけでなく、
BMP, EPS, PS, PNG, PCX, JPEG, TIFF
にも対応しています。その中にTIFFがあります。TIFFならAccessから「FAX失敗通知」を印刷する時、Access標準のイメージコントロールで簡単に表示できます。PDFだとAccess標準のイメージコントロールでは表示できないので、別の方法を考えなければなりません。面倒なので、TIFFでやることにしました。
が、PDF WriterでTIFF形式の設定方法がわかりません。サンプルプログラムでは「PDF」になっていて、単に「TIFF」に変えてみてもうまく行きません。
あきらめかけて、Ghostscriptのホームページをみると、書いてあるではないですか。「TIFF file formats」。TIFFって色々な形式があります。結局、FAXしてみて一番きれいそうな「tiffg32d」で行うことにしました。
http://www.ghostscript.com/doc/9.05/Devices.htm#PDF
(2)tifをどうやって印刷するか
これも悩みました、WindowsXPで手で操作して印刷するのは簡単なのですが、プログラムから印刷するとなると、また別問題です。さんざんぱ調べたあげく、次に行き当たりました。Windows2000用のイメージングを使用することにしました。
http://oshiete.goo.ne.jp/qa/1575230.html
==================
No.1ベストアンサー20pt
回答者:xcrOSgS2wY
回答日時:2005/08/12 17:24
1. Windows XPを起動。
2. Windows 2000 CD-ROMを入れる。(以下、CD-ROMドライブをD:と仮定します。)
3. コマンドプロンプトを開く。
4. 適当なフォルダに移動する。
5. 「expand -r d:\i386\imagevue.in_ .」を実行する。(imagevue.infが作成されます。)
6. エクスプローラを起動。
7. 5.で作成されたimagevue.infを右クリックして「インストール(I)」を選択。
8. ファイルの場所を聞かれた、コピー元に「d:\i386」を指定してOK。
これでImagingがインストールされます。
なお、Windows 2000に付属のImagingをWindows XPで使用することの是非、特にライセンス関係については、私には分かりませんので、著作権者にお尋ねください。
==================
そして、プログラムから
Shell """C:\Program Files\Windows NT\Accessories\ImageVue\kodakimg.exe """ & " /p " & """" & ファイル名 & """", vbNormalFocus
で印刷。
(2)doc、xlsの印刷
docファイル、xlsファイルも(1)の方法でtif化したイメージをFAXすることはできるのですが、tif化した画像があまりきれいでありません。Word、Excelから直接FAXする方がよほどきれいです。
doc、xlsをWord、Excelから印刷してFAXするのは簡単なのですが、tifの場合に簡単だった「FAX失敗通知」にイメージを貼り付けるのが今度は難しい。「FAX失敗通知」には
FAX画像
失敗したこと
失敗した理由(「話し中」だったとか、相手が「FAXじゃない」とか)
を表示しなければなりません。docファイルは「透かし」を使って表示して印刷することにしました。
xlsは「透かし」がうまくいかなかったので、仕方なくセルの一部に表示させて印刷ました。
(3)Accessの印刷がうまくいかなくなった
これまで、A4、B4、ミシン目A4などの印刷条件をそれぞれ、印刷条件を設定した別個のプリンターを用意しておき、「通常使うプリンター」を変更することで使い分けていました。同じ複合機で条件を変えていただけだったので、プリンタードライバーそのものを切り換えていたわけではありませんでした。
今回初めてPDFWriterと複合機のプリンタードライバーの使い分けをすることになったのですが、PDFWriterでtif出力した後、
Set Application.Printer = Application.Printers(複合機のIndex)
で元の複合機にセットしても、PDFWriterを使用しない時のように「通常使うプリンター」を切り換えることでの印刷条件の使い分けができなくなってしまいました。
PrtDevModeプロパティを使用して、それぞれ印刷する際に印刷条件を設定すれば良いのでしょうが、全ての印刷で条件設定してやらなければならないので、修正が膨大です。
http://www.accessclub.jp/samplefile/samplefile_58.htm
一度、販売管理プログラムを終了してしまえば、また「通常使うプリンター」の切り替えで問題無く使用できるので、当面、PDFWriterを使用した後は一端、販売管理プログラムを終了、起動して使用することにしました。トホホ...
ーーーーーーーーー
以前、試してみたことがあるのですが、Accessのプリンターオブジェクトは色分解印刷に対応していません。
なのでPrtDevModeプロパティを使ったとしても色分解印刷はできないので、やはりこれまで通りの使い方は無理ということになります。
一度Application.Printerを設定してしまうと、設定を複合機に戻してやってもうまく行かないというのは、多分これまでApplication.PrinterがNullの状態で使用していたのではないかと思います。設定をNullにするのはチョット無理なのではないかと思っています。
(4)Application.QuitでExcelのプロセスが終了しない
VBAで起動したExcelがQuitしてもプロセスが残ってしまというバグが今回も影響して、FAXサーバーが止まってしまいます。しょうがないのでその都度、下記で、Excelのプロセスを強制終了させることに。
(プログラム例は「notepad.exe」ですが、「EXCEL.EXE」に変更)
http://gallery.technet.microsoft.com/scriptcenter/8178678e-fe4f-41ec-8939-f9dfb033b073/
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
ーーーーーーーーーーーーーーーー
とりあえず、以上でしばらく運用してみることにしました。