dポイントプレゼントキャンペーン実施中!

PHP(5.3.1)を使ってサーバー上のエクセルファイル sample.xlsxを印刷しようと思いましたが思うようにいきません。

PHPでサーバー上のbatファイルを呼び出し、そのbatからvbsでバックグラウンド印刷させようとしています。
社内ネットワークでのアプリでして、プリンタは条件によって部署ごとのプリンタが指定されるので変数になっています。

PHP:
$ret = exec("cmd.exe /c C:\\xampp\htdocs\excelprint.bat $printerName");

bat:
cscript C:\xampp\htdocs\xlsprint.vbs C:\xampp\htdocs\sample.xlsx %1

vbs:
Set xl=CreateObject("Excel.Application")
xl.AutomationSecurity=2
xl.Visible = false
Set bk=xl.WorkBooks.Open(WScript.Arguments.Item(0))
Call bk.PrintOut(,,,,WScript.Arguments.Item(1))
bk.Close
Set bk=Nothing
xl.Quit
Set xl=Nothing

以上のような感じでやってみたのですが印刷されませんでした。
$printerNameがAdobePDFやMSのドキュメントライターのような仮想プリンタの場合は
サーバー側で印刷ダイアログ(保存しますか?というやつです)が表示されていますが、
通常の紙に印刷されるプリンタは反応しませんでした。
batファイルの%1をプリンタ名に変えて、batファイルをダブルクリックした場合は印刷されました。
何がまずいのか判る方がいらっしゃれば、教えてください。
よろしくお願いします。

A 回答 (2件)

>$ret = exec("cmd.exe /c C:\\xampp\htdocs\excelprint.bat $printerName");



$cmd = "cmd.exe /c C:\\xampp\htdocs\excelprint.bat $printerName";
print $cmd . "<br />" . PHP_EOL;
$ret = exec($cmd);

などとして、コマンドの中身を確認してください。

最初(C:\\xampp)はちゃんとescapeしているのに、後半の「\」(2ヶ所)をescapeしていないのは転記するときのtypoでしょうか?

この回答への補足

コマンドの中身は期待通りのものでした。
サーバーのコマンドプロンプトに貼りつけて実行させた場合は印刷されました。

自宅でソースを思い出しながら書いたため、エスケープミスがあったのはすいませんでした。
加えてコマンドの部分も
$cmd = "cmd.exe /c C:\\xampp\htdocs\excelprint.bat " . $printerName ;
が正しいソースでした。

補足日時:2011/10/13 22:22
    • good
    • 0

根本的な確認事項ですが、そのサーバにプリンタが接続されていて(オンラインになっていて)、プリンタドライバもインストールされているのですか?


ご確認ください。

この回答への補足

サーバーPCは接続もドライバもクリアされています。
質問内容にも記入しましたが、batファイルを手動でダブルクリックして実行した場合は印刷まで行われます。

PHPはLAN上の他の端末からのリクエストで動いていますが、実行指示を出した端末にもドライバがいるんでしょうか?

補足日時:2011/10/12 09:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!