コマンドラインで pdf 文書などをプリンターに出力

Canon 1820 - Ethernet で接続
Unix のコマンドラインから pdf 文書であったりワードの文書を印刷指示したいのですが方法が分からず困っています。
もし出来るとして、さらには用紙の設定方法や向き・余白なども気になります。
ぶしつけですがよろしくお願いします。

投稿日 2005/08/02 18:32

返信: 10

2005/08/02 22:46 Community User への返信

なぜコマンドラインからする必要があるのでしょうね?
汎用的な方法としては、AppleScript(コマンドラインからならosascript)を利用するしか無いと思います。
$ osascript -e 'tell app "Macintosh HD:Users:hogehoge:Library:Printers:プリンタ名.app"' -e 'open alias "Macintosh HD:Users:hogehoge:Documents:ファイル名"' -e 'end tell'
みたいな感じでしょうか。
用紙設定までとなると、完全にAppleScriptでスクリプトを書くしかない?しかもアプリがそこまでAppleScriptに対応していないと不可です。
PDFだけなら、例えばGhostScriptを使うなどして、AppleScriptを使わなくてもできるかもしれません。ちょっとそこまでは存じ上げません。

2005/08/02 23:03 Community User への返信

CUPS のドキュメントを読んでください(サファリで、http://127.0.0.1:631/ として 、On Line Help をクリックしてください)。英語ですけど、詳しく説明されてます。pdf や、jpg ファイルは可能(上記オンラインヘルプに例が出ているので。しかし本当にできるか?)かもしれませんが、Word の文書をいきなりコマンドラインでプリントするのは無理です。Word のファイルは Word でしか印刷フォーマットにできませんから(open office でも入れていればできる?)。

2005/08/03 19:06 Community User への返信

CUPS ドキュメントを参照しトライしてみます。情報ありがとうございます。
・コマンドラインからの印刷の件ですが・・
telnetからの端末で指示書番号を受けそれにあった指示書をそれぞれのプリンターに出力させたい。現在は文字情報だけの物を出力していたが今後図示も含めたい。
内製のこのソフトウェアはかなり古く(C++)で書かれていて、FreeBSD などを経て現在 X-Server 上でリコンパイルして使っています。印刷指示も lpr です。

2005/08/03 21:35 Community User への返信

すべてのファイルに対して同じコマンドでなくてもよい、つまりWordやExcelの文書用にそれぞれスクリプトを用意できるなら、例えば次のようなシェルスクリプトが考えられます。
#!/bin/sh
if [ $# -eq 0 ]; then echo "Usage : `basename $0` filepath" && exit; fi
if [ ${obj:0:1} != "/" ]; then obj=`cwd`/$obj;
osascript << EOF
set falias to (POSIX file "$obj") as alias
tell app "Finder" to open falias
tell app "Microsoft Excel"
print out worksheet 1
end tell
quit app "Microsoft Excel"
EOF
先のレスで示した1行コマンドは、jpgやpdfの場合は問題ないですが、WordやExcelの場合はプリンタダイアログが出てしまうので、端末からではダメですが、こちらは「print out」を使っているので、ダイアログ無しで印刷されます。
問題は、前レスのコマンドも含めて、日本語のフォルダやファイル名だとうまくいかないことです。どうもosascriptがちゃんと日本語対応していないのが原因と思われますが、回避策があるかどうか調べています。

2005/08/03 21:38 Community User への返信

すべてのファイルに対して同じコマンドでなくてもよい、つまりWordやExcelの文書用にそれぞれスクリプトを用意できるなら、例えば次のようなシェルスクリプトが考えられます。

#!/bin/sh
if [ $# -eq 0 ]; then echo "Usage : `basename $0` filepath" && exit; fi
if [ ${obj:0:1} != "/" ]; then obj=`cwd`/$obj;
osascript << EOF
set falias to (POSIX file "$obj") as alias
tell app "Finder" to open falias
tell app "Microsoft Excel"
print out worksheet 1
end tell quit app "Microsoft Excel"
EOF
先のレスで示した1行コマンドは、jpgやpdfの場合は問題ないですが、WordやExcelの場合はプリンタダイアログが出てしまうので、端末からではダメですが、こちらは「print out」を使っているので、ダイアログ無しで印刷されます。 問題は、前レスのコマンドも含めて、日本語のフォルダやファイル名だとうまくいかないことです。どうもosascriptがちゃんと日本語対応していないのが原因と思われますが、回避策があるかどうか調べています。

2005/08/03 21:41 Community User への返信

すべてのファイルに対して同じコマンドでなくてもよい、つまりWordやExcelの文書用にそれぞれスクリプトを用意できるなら、例えば次のようなシェルスクリプトが考えられます。
#!/bin/sh
if [ $# -eq 0 ]; then echo "Usage : `basename $0` filepath" && exit; fi
if [ ${obj:0:1} != "/" ]; then obj=`cwd`/$obj;
osascript << EOF
set falias to (POSIX file "$obj") as alias
tell app "Finder" to open falias
tell app "Microsoft Excel"
print out worksheet 1
end tell
quit app "Microsoft Excel"
EOF
先のレスで示した1行コマンドは、jpgやpdfの場合は問題ないですが、WordやExcelの場合はプリンタダイアログが出てしまうので、端末からではダメですが、こちらは「print out」を使っているので、ダイアログ無しで印刷されます。 問題は、前レスのコマンドも含めて、日本語のフォルダやファイル名だとうまくいかないことです。どうもosascriptがちゃんと日本語対応していないのが原因と思われますが、回避策があるかどうか調べています。

2005/08/03 21:43 Community User への返信

すべてのファイルに対して同じコマンドでなくてもよい、つまりWordやExcelの文書用にそれぞれスクリプトを用意できるなら、例えば次のようなシェルスクリプトが考えられます。

#!/bin/sh
if [ $# -eq 0 ]; then echo "Usage : `basename $0` filepath" && exit; fi
if [ ${obj:0:1} != "/" ]; then obj=`cwd`/$obj;
osascript << EOF
set falias to (POSIX file "$obj") as alias
tell app "Finder" to open falias
tell app "Microsoft Excel"
print out worksheet 1
end tell
quit app "Microsoft Excel"
EOF

先のレスで示した1行コマンドは、jpgやpdfの場合は問題ないですが、WordやExcelの場合はプリンタダイアログが出てしまうので、端末からではダメです。こちらは「print out」を使っているので、ダイアログ無しで印刷されます。ただし、プリンタの設定や用紙設定はすませてあるのが前提です。
問題は、前レスのコマンドも含めて、日本語のフォルダやファイル名だとうまくいかないことです。どうもosascriptがちゃんと日本語対応していないのが原因と思われますが、回避策があるかどうか調べています。

2005/08/04 15:08 Community User への返信

なんとか日本語のパス名への対処ができました。osascriptへはShift-JISに変換してから渡して、中でUnicodeにまた変換すればいけるようです。
また、前レスのスクリプトに貼付けミスがあり、一部欠けていたのも修正して、以下のようになります。


#!/bin/sh
if [ $# -eq 0 ]; then echo "Usage : `basename $0` filepath" && exit; fi
obj=$1
if [ "${obj:0:1}" != "/" ]; then obj=`pwd`/$obj; fi
iconv -c -f UTF-8 -t SJIS << EOF | osascript
set fpath to "$obj" as Unicode text
set falias to (POSIX file fpath as Unicode text) as alias
tell app "Finder" to open falias
tell app "Microsoft Excel"
print out worksheet 1
end tell
tell app "Microsoft Excel" to quit without saving
EOF

"Excel"を"Word"に変更し、"worksheet"を"document"に変更すれば、Word用のスクリプトになります。

2005/08/04 15:15 Community User への返信

なんとか日本語のパス名への対処ができました。osascriptへはShift-JISに変換してから渡して、中でUnicodeにまた変換すればいけるようです。
また、前レスのスクリプトに一部貼付けミスで欠けていたのも修正して、以下のようになります。
#!/bin/sh
if [ $# -eq 0 ]; then echo "Usage : `basename $0` filepath" && exit; fi
obj=$1
if [ "${obj:0:1}" != "/" ]; then obj=`pwd`/$obj; fi
iconv -c -f UTF-8 -t SJIS << EOF | osascript
set fpath to "$obj" as Unicode text
set falias to (POSIX file fpath as Unicode text) as alias
tell app "Finder" to open falias
tell app "Microsoft Excel"
print out worksheet 1
quit without saving
end tell
EOF
"Excel"を"Word"に変更し、"worksheet"を"document"に変更すれば、Word用のスクリプトになります。

2005/08/04 15:42 Community User への返信

Y.Kawabeさん、皆さんありがとうございます。
一行記載の osascript で pdf 文書の印刷に成功し感動してます。 CUPS についてはこれから理解を深めてようという段階でまだまだですがこの一行スクリプトは私に光を与えてくれました。これらデーター元の場所としてこれからも日本語名のフォルダーおよびファイル名は使わないとしますが、一般に見えるようにする場所でもない事からこの事は何の支障もありません。
今の私のレベルでは当面PDF文書の作成時にレイアウトをきちんとしておく事で巧く対応できそうです。将来は印刷時に基本図の PDF 文書に指示する内容を上書きした物を作成し、それをプリンターに送るという形まで持って行けたらいいかと考えています。
X-Serverは Panther のままで Tiger にアップしてませんが、安定して動いているのでシステムを停止して更新という気持ちに中々なりません。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

コマンドラインで pdf 文書などをプリンターに出力

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。