5

Mac OS X のプリンター (USB またはネットワーク) に送信する必要がある一連のプリンター エスケープ シーケンス (ESC/P) があります。CUPS を直接使用するのが最善の方法ですか? 「より高いレベル」の方法はありますか?

質問する前に: 私は本当にエスケープ シーケンスを送信する必要があり、単純に高レベルの印刷システムを使用することはできません。

編集: これらは、Java などの他の言語で同様の機能を提供するいくつかのプロジェクトとリソースです。

4

3 に答える 3

3

これを行う最良の方法は、CUPS/lpを使用することだと思います。

echo "ctrl_char" | cat file_to_print - | lp [...flags...]
于 2012-08-09T03:30:15.980 に答える
3

UNIX システムコールを使用して、C で制御文字を送信できます。

char escp_seq[BYTES_FOR_SEQUENCE];

// ...initialize the ESC/P sequence.

int printer_fd = open("/dev/lp0", O_WRONLY);
ssize_t bytes_written = write(printer_fd, escp_seq, sizeof(escp_seq));
close(printer_fd);

印刷可能なデータ自体については、 Core Printingを使用できます。

このライブラリを使用すると、次のいずれかを使用できます

OSStatus PMPrinterPrintWithProvider (
   PMPrinter printer,
   PMPrintSettings settings,
   PMPageFormat format,
   CFStringRef mimeType,
   CGDataProviderRef provider
);

データを使用して CGDataProviderRef を作成する必要があります。

または、次のファイルを使用できます。

OSStatus PMPrinterPrintWithFile (
   PMPrinter printer,
   PMPrintSettings settings,
   PMPageFormat format,
   CFStringRef mimeType,
   CFURLRef fileURL
);

具体的なコード例を示すことができなくて申し訳ありませんが、プリンターに送信したいデータをどのように構築するつもりなのかよくわかりません。これは少なくとも、ハッキングを開始するための基礎を提供するはずです。上記のAppleドキュメントには、あなたのタスクを達成するのに十分なものがあると確信しています.

幸運を!

于 2012-08-09T16:28:36.367 に答える
3

スクリプトを使用して Mac bash シェルから印刷しています (プロの自動化された End Of Line 製品テスターで)。

非常に単純化された「Hello」ラベルは次のように印刷されます。

data="\x1Bia\x00"
data="${data}\x1B@"
data="${data}\x1BX\x32"
data="${data}Hello"
data="${data}\x0C"

# Check your own binary for debugging:
echo -ne $data | hexdump -C

# print the actual label
echo -ne $data | lp -d Brother_PT_P900W

プリンター名を独自のプリンター名に置き換える必要があることに注意してください。

于 2017-12-05T14:21:32.590 に答える