最近、php を使用してプリンターに接続し、コンテンツを印刷したいと考えています。いくつかの手順を実行しましたが、応答がありません。理由を見つけるのを手伝ってください:
私は使用していますphp7.25 Apache バージョンの場合、最新の php_printer.dll をダウンロードしました。
ダウンロード後、ファイルを解凍し、php7.25 バージョンのディレクトリ E:\phpStudy\ に置きます。 php\php-7.2 .5\ext
php.ini を変更するために、次の文を追加しました: extension=php_printer.dll。次に、保存してサーバーを再起動します。
PHP で使用します:
$handle = printer_open("ZDesigner 105SL 203DPI");
エラーを直接報告します: 致命的なエラー: 捕捉されませんエラー: E:\phpStudy\WWW\test\1.php:3 の未定義関数 printer_open() の呼び出し スタック トレース: #0 {main} が E:\phpStudy\WWW\test\1.php の 3 行目でスローされました
1. 要件
PHP コントロールを使用してプリンターに接続します
動的データをオンサイトでリアルタイムに連続印刷する
構成
PHP オペレーティング環境が正しくインストールされていること (Apache|Nginx + PHP) php のバージョンに対応する php_printer.dll 拡張子をダウンロードします
拡張子ファイルを ext ディレクトリに追加します
php.ini を編集し、extension=php_printer.dll;
3 を使用します
1.
上記は基本的なコード構造です。printer_start_doc、printer_start_pageが指定されていない場合、プリンターは印刷しません。 2. テキストとグラフィックの具体的な印刷方法の紹介プリンターの初期設定: printer_set_option 印刷モード、ドキュメントのタイトル、印刷部数、用紙形式などを設定できます。printer_set_option のドキュメントを参照してください。 フォントを作成します: $font = printer_create_font('simsun', フォントの高さ、フォントの幅、フォントの太さ、斜体かどうか、下線を付けるかどうか、取り消し線を追加するかどうか、方向); 詳細を参照してください。 テキストを印刷する前に、まずフォントを選択する必要があります printer_select_font($handle, $font);Use printer_draw_text($handle,'text to be print', starting x, starting y);4. 落とし穴に遭遇しました。ハードウェアを扱うためにサーバーサイドの弱い型指定のスクリプト言語を使用するのは、もともと少し面倒で、そのプロセスには多くの困難があります。
Windows で設定を開始したサーバーは Apache でしたが、印刷するときに常に通常のサイズで印刷できず、常に 3 ページ連続で印刷されました。その後、コマンドラインで php コマンドを直接使用してスクリプトを実行したところ、最終的には正常に印刷できました。これは、Apache サービスの実行権限が通常ユーザーに変更され、またはスーパー管理者に変更されたことが原因でした。スーパー管理者としてログインできます。
フォント、一部のプリンターには対応するクライアント ソフトウェアが付属しています。ただし、プリンター ソフトウェアの制御に PHP を使用するのは役に立たないため、フォントの作成は落とし穴になります。フォントの名前については、まず Windows のフォント フォルダーで対応するテキストを見つけ、次にプロパティを右クリックして名前を表示します。最初のパラメータに printer_create_font を入力します。ただし:
一部の種類の中国語フォントは正しく表示されません。今のところ解決策はありません。プリンタのメモリが限られており、すべてのフォント ファイルを保持できない可能性があります。
フォントを作成するには、幅と高さを指定する必要がありますが、幅と高さの単位がわからないので、自分で試すしかありません
同様に、問題の位置を指定するには、 x y 位置座標値を用いて斜線を描画するメソッドであり、高比率の計算に応じて斜線を描画することができます。
中国語が文字化けして印刷される 理由: フォームを使用して送信されたデータは UTF-8 でエンコードされており、プリンターは必ずしも UTF-8 でエンコードされているわけではありません。エンコード形式を変換するにはマニュアルを参照する必要があります。
何十、何百ものウィンドウを継続的に印刷すると、ブルースクリーン Smecta が私を直接殺しました。結局のところ、Apache のプロセスに問題があり、印刷するたびにプロセスが作成されますが、最終的にはシステムが直接停止してしまうようです。接続の最大数は影響しないためです。最終的な解決策: Nginx サーバーを交換すると、問題は解決します。
PHP は JS を直接使用した方が良いのではないでしょうか?