2016-05-07 17 views
1

ご協力いただければ幸いです。 CitizenのラベルプリンタにDPDラベルを自動的に印刷するPHPシステムに接続しようとしています。インストールされたphp_printerを使用しています。このコードは、コードからプリンタを見ることができ、DPDのapi呼び出しはDPDのWebサイトで新しい出荷を生成しています。DPDラベルCitrixラベルプリンタ用PHP APIを使用したラベル印刷

質問

  1. まず、これはphp_printerを使用してPHPアプリケーションから市民のラベルプリンタに生の印刷データを送信するために行くための最善の方法であるか、より良い方法はありますか?
  2. もう少しライブテストを行っていますが、DPD api get Labelコールで書式設定の問題が発生していると思われます。ここで生の市民の印刷データを取得し、プリンタに直接送信して印刷をトリガーします。私たちは、出力に以下のサンプルデータを受信して​​いる

    \M3000\c0000\e\O0220\f290\n\a\LD11PISIH12 
    2911A0803340387DPD 
    2911A0603500375www.dpd.co.uk 
    1911A1003800095Responsible Delivery - CO Neutral 
    1911A08037802572 
    2911A0603780354Sender 
    2911A0603780346GEOPOSTUK LTD 
    2911A0603780338ROEBUCK LANE 
    2911A0603780330SMETHWICK 
    2911A0603780322BIRMINGHAM 
    ------ etc 
    

    APIの例からのデータは、スラッシュますfile_put_contents後のファイルに登場し、読者にされていないことで.txtファイル予想

それらはスペースまたは黒い円として表示されます。我々は

M3000c0000eO0220f290naLD11PISIH12 
2911A0803340387DPD 
2911A0603500375www.dpd.co.uk 
1911A1003800095Responsible Delivery - CO Neutral 
1911A08037802572 
2911A0603780354Sender 
2911A0603780346GEOPOSTUK LTD 
2911A0603780338ROEBUCK LANE 
2911A0603780330SMETHWICK 
2911A0603780322BIRMINGHAM 

を受けている

実際のデータは、誰もが、我々は何も要求から削除されていないことを確認するために設定する必要があり、PHPヘッダーまたは出力の設定をお勧めすることはできますか?ラベルのためのDPDに送ら

PHPのコードサンプル: - 事前に

$shipmentId = 123456789; 
$method = '/shipping/shipment/' . $shipmentId . '/label/'; 

$url = 'https://api.dpd.co.uk . $method; 
$options = array(
'http' => array(
    'method' => 'GET', 
    'Host' => 'api.dpd.co.uk', 
    //'header' => "Accept: text/html\r\n" . 
    'header' => "Accept: text/vnd.citizen-clp" . 
    "GEOClient: account/" . $account_number . "\r\n" . 
    "GEOSession: " . $session . "\r\n" 
) 
); 

$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 
file_put_contents("dpd_test_citizen_clp.txt", $result); 

ありがとう!

+0

Seanも同様の問題があります。ただし、プリンタにコマンドを送信しても動作しないようです。コマンドをプリンタに送るためにPHPコードを共有してもよろしいですか?乾杯 –

答えて

2

このファイルを実際に印刷する方法を知りたい方には、データはCitizen PRN形式であり、Windows COPYコマンドを使用して直接プリンタに送信できます。

COPY /B C:\FILENAME.PRN \\ComputerName\PrinterName 

あなたは、あなたが使用することができ、これを達成するためにローカルでPHPを実行している場合\\ComputerName\PrinterName

でアクセスシチズンプリンタ用のプリンタ共有を作成する必要があります。コマンド・プロンプトから

file_put_contents("C:\dpd.prn", $data) 
exec("COPY /B C:\DPD.PRN \\ComputerName\PrinterName") 

ローカルでPHPをインストールあまりにも困難なまたは複雑見つけた場合は、AutoHotkeyをのような基本的なスクリプト言語を使用することを検討しては:https://autohotkey.com/

EDIT:それを得ていない多くの時間後https://github.com/MacroMan/DPDLocalPrinter

0

更新:これは実際に返された入力から\を削除した点でDPDのAPI変更でした。上記のコードはすべて問題なく、出力は期待通りでした。

0

:私はので、あなたが地元の市民プリンタに、それに送られたデータをコピーするのWebSocketとに接続することができますnodejsアプリケーションを書かれている 私は私のソリューションを共有すると思った。上記のすべてが正しいです、私たちが間違っていた唯一のこと(私はばかばかしいと感じます)は、を新しいファイルにするのではなく、PostmanからAPI応答をコピーしていました。

postmanやDPD APIからの応答をコピーして貼り付けると、動作させるために必要なすべてのビットが削除されます。

関連する問題