web-dev-qa-db-ja.com

コマンドラインからのプリンター設定の変更

私は6mmから36mmのテープを使用するBrotherPT-9800PCNラベルプリンターを持っています。コマンドラインからデフォルトの用紙サイズ(幅、長さ、向き)を変更する方法はありますか? fpdfを使用してpdfで18x113mmおよび24x50mmのラベルを生成していますが、phpを介してpdfをプリンターに送信すると、デフォルトで設定されている用紙サイズでのみ印刷されます。 Adobe、Foxit、Sumatraでコマンドを試しました。同じ結果で用紙サイズを設定するオプションがあるVerypdfpdfprintコマンドラインも試しました。コマンドラインでデフォルトの用紙サイズを変更してから印刷ジョブを送信すると、機能するはずだと考えていました。

3
xlucian

長い頭をバッシングした後、私はなんとかそれを機能させることができました。私がやったことは

->必要な用紙サイズごとに、プリンタの設定に移動し、ページサイズ、幅、長さ、およびその他の必要な設定を設定します

->各ページサイズのすべての設定が完了した後にcmdで実行

rundll32 printui.dll PrintUIEntry /Ss /n "\\network\printer" /a "C:\prefered_location\temp_settings.dat" u

->必要なページサイズごとに、設定を18x113m.datおよび24x45mm.datとして保存しました

これは、PDFをプリンターに送信するためにPHPで使用するコードです。

<?php
//save current printer settings to a temp file
echo system("rundll32 printui.dll PrintUIEntry /Ss /n \"\\\\network\\printer\" /a \"C:\\location\\temp_settings.dat\" u");
//load the required page settings
echo system("rundll32 printui.dll PrintUIEntry /Sr /n \"\\\\network\\printer\" /a \"C:\\location\\24x45mm.dat\" u");
//send pdf to printer. I've used in this case pdfprint.exe. Foxit can be used as well. Adobe didn't work. Sumatra still sends the pdf only to a 36mm tape
echo system("C:\\location\\pdfprint_cmd\\pdfprint.exe -printer \"\\\\network\\printer\" C:\\location\\mypdf.pdf");
//restore temp settings
echo system("rundll32 printui.dll PrintUIEntry /Sr /n \"\\\\network\\printer\" /a \"C:\\location\\temp_settings.dat\" u");
//delete temp settings file
echo system("del C:\\location\\temp_settings.dat");
?>
2
xlucian