Firefox アドオン JPPrintSetup を発見!

WEBアプリを作る上での、避けて通れない、プリンタの制御。
やっと見つけました。とりあえず、Firefox用なので、それで試してみることに。

https://addons.mozilla.org/en-US/firefox/addon/8966
から入手。

作者のURLのリファレンス
http://jsprintsetup.mozdev.org/reference.html


追記
暇があれば、下記を修正したりしているけど、用紙のサイズの指定ができなさそう;_;
それができれば、良かったのに・・・。


JSPrintSetupオブジェクトのリファレンスっぽいの。

Methods

  • setOption , getOption

プリンタへの設定値の設定と取得。

jsPrintSetup.setOption( '設定文字列', 設定値 ); //設定
jsPrintSetup.getOption( '設定文字列' ); //取得
設定文字列 用途 設定値
orientation 用紙の方向
marginTop 上部の余白 数値。単位はミリメートル
marginBottom 下部 〃 〃(mm)
marginLeft 左側 〃 〃(mm)
marginRight 右側 〃 〃(mm)
headerStrLeft ページのヘッター左側文字列 文字列を指定します。以下特殊文字
headerStrCenter   〃 中央 〃。〃 &T タイトル
headerStrRight   〃 右側 〃。〃 &U URL
footerStrLeft ページのフッター左側文字列 〃。〃 &D 日付/時間
footerStrCenter   〃 中央 〃。〃 &P ページ番号
footerStrRight   〃 右側 〃。〃 &PT 総ページ/ページ番号
設定文字列 用途 設定値
shrinkToFit ページ合わせて縮小印刷する 0 or 1
numCopies コピーする枚数 数値
outputFormat ??? ※alert(jsPrintSetup.getOption( 'outputFormat' )); 戻り値は、0
paperData ??? ※alert(jsPrintSetup.getOption( 'outputDate' )); 戻り値は null だが、現在サーポートされていないとalertされる
paperName 用紙の名前 文字列
paperHeight 用紙の高さ 数値(mm)
paperWidth 用紙の幅 数値(mm)
paperSizeType ??? ※alert(jsPrintSetup.getOption( 'printSizeType' )); 戻り値は null だが、現在サーポートされていないとalertされる
paperSizeUnit 用紙のサイズの単位 読み出し専用
scaling 拡大縮小率 パーセント指定(%)
printRange ページ指定 ページの範囲を指定。省略すると全ページ
startPageRange 印刷範囲の最初のページ 数値
endPageRange 印刷範囲の最後のページ 数値
printSilent 確認なしでの印刷 数値。0 or 1
printBGColors 背景の色を印刷 数値。0 or 1
printBGImages 背景の画像を印刷 数値。0 or 1
  • setGlobalOption( in string option, in wstring value);

おそらく、登録されたプリンタへの設定だと思う

  • setPaperSizeUnit(), getPaperSizeUnit();

用紙サイズの単位の設定と取得。ただし意味をなさないかも。

  • refreshOptions();

おそらく、設定値を保存しておいた設定値に戻すためだと思う

  • saveOptions(in long optionSet);

おそらく、プリンタの設定値を保存するのだと思う

  • saveGlobalOptions(in long optionSet);

おそらく、登録されたプリンタの設定値を保存するのだと思う

  • getPrintersList();

登録されたプリンタの名前を取得する
戻り値は、配列ではなく","区切りの文字列を返す。

  • setPrinter('プリンタの名前');

制御するプリンターを指定する。
※ネットワークに繋がれたプリンタを指定する場合、"\"の文字に注意
getPrinter();を実行し返される値と同じなら設定されたことと判断する

jsPrintSetup.setPrinter( 'EPSON PM-4000PX' );
jsPrintSetup.setPrinter( '\\\\SERVER\\EPSON PM-4000PX' ); //\をエスケープ
  • setShowPrintProgress(in boolean flag);

現在、未検証。

  • getShowPrintProgress();

現在、未検証。

  • setSilentPrint( true | false );

直接印刷(印刷ダイアログ確認なし)の設定
(trueの他に0以外の数値でも可)

jsPrintSetup.setSilentPrint( true );
//もしくは、
jsPrintSetup.clearSilentPrint();
jsPrintSetup.setOption('printSilent', 1);
  • getSilentPrint( );

直接印刷(印刷ダイアログ確認なし)の、設定値の取得
※setSilentPrint()で設定を行っていない場合や、clearSilentPrint()後の
値の取得は、現在のところエラーになるようだ。

  • clearSilentPrint();

直接印刷(印刷ダイアログ確認なし)の設定を、初期化する

  • print();

印刷実行。標準のプリンタの設定で印刷なら、単に winows.print();を。

jsPrintSetup.print();

標準のプリンタの設定で印刷なら、単に winows.print();を。

  • printWindow(in nsIDOMWindow aWindow);

print()と類似しているが、フレームが利用されている場合に利用する(未検証)

jsPrintSetup.printWindow( window.frames[0] ); //親側から子だけ印刷
jsPrintSetup.printWindow( window ); //子側から親を含め全体

以下書きかけ

<script type="text/javascript">

var Printer = function ( ) {
  if( ! jsPrintSetup ) {
    alert( 'jsPrintSetup がありません\ nhttps://addons.mozilla.org/en-US/firefox/addon/8966' );
  }
};

Printer.getList = function ( ) {
  var List = jsPrintSetup.getPrintersList( ).split( ',' );
  return List;
};

Printer.has = function ( printer_name ) {
  var list, reg, flag = false;;
  
  if( printer_name ) {
    reg = new RegExp( '(^|,)' + printer_name + '($|,)' );
    flag = reg.test( jsPrintSetup.getPrintersList( ) );
  }
  return flag;
};

Printer.use = function ( printer_name ) {
  var flag = this.has( printer_name );
  
  flag && jsPrintSetup.setPrinter( printer_name );
  return flag;
};

Printer.docMargin = function( /* top, left, bottom, left */ ) {
  var n = arguments.length - 1;
  if( 0 <= n ) {
    jsPrintSetup.setOption( 'marginTop', arguments[0] );
    jsPrintSetup.setOption( 'marginRight',  arguments[ [ 0, 1, 1, 1][n] ] );
    jsPrintSetup.setOption( 'marginBottom', arguments[ [ 0, 0, 2, 2][n] ] );
    jsPrintSetup.setOption( 'marginLeft',   arguments[ [ 0, 1, 1, 3][n] ] );
  }
}

Printer.docHeader = function() {

};



</script>