8

C# からドット マトリックス プリンター (さまざまなモデル) に印刷しようとしています。現在、Win32 API (オンラインで多くの例を見つけることができます) 呼び出しを使用して、C# アプリケーションからプリンターに直接エスケープ コードを送信しています。これはうまくいきますが...

私の問題は、エスケープコードを生成していて、Windows印刷システムに依存していないため、印刷物を「通常の」プリンターやPDFプリンタードライバーなどに送信できないためです。(Easy Print [XPS ベース] を使用して 2008 ターミナル サーバーでアプリケーションを使用しようとしているため、これが問題を引き起こしています)

問題は、フォーマットされたドキュメント (事前に印刷されたステーショナリーの請求書) を、直接印刷やエスケープ コードなどを使用せずに C# からドット マトリックス プリンター (エプソン、オキ、パナソニックなどのさまざまなモデル) に印刷するにはどうすればよいかということです。

**明確にするために、GDI+ (System.Drawing.Printing) などを試していますが、問題は、古いコードのように整列させるのが非常に難しいことです。(古いコードは、Windows ドライバーをバイパスしてプリンターに直接文字を送信しました。) GDI+ を使用しながら、古いコードのように並べられるように改善する方法について何か提案はありますか?

4

8 に答える 8

10

レポート ツールを使用してテンプレートを作成し、事前に印刷されたひな形に関してフィールドを正しく配置できるようにする必要があります。

ドットマトリックス プリンターを使用する場合、基本的に次の 2 つのモードのいずれかで作業する必要があります。

  • 行/列テキストの単純なタイプライター モード。エスケープ シーケンスを送信して、プリンター ハードウェアに含まれる少数のフォントを管理し、改行などを管理する必要があります。
  • ページがラスタライズされ、プリンタ ドライバがプリント ヘッドとピンを駆動してドットを出力するグラフィック出力。

最初の使用法は、出力を制御する方法があまり提供されず、各プリンターが独自の特性を持っているため、ソフトウェアがページ上で物事を予測して配置するのが扱いにくく、困難になるため、Windowsではほとんど非推奨です(WYSIWYGなし)。

2 つ目は、プリンタの実際の機能とは無関係にテキストとグラフィックスを配置するグラフィック ページ パラダイムを使用するだけです。
事前に印刷されたひな形を使用する場合、ジョブはページ上にデータを正しく配置することです。
これを手作業で行うとリソースが消費され、コードでレイアウトを作成することはお勧めできません。プリンター、ページ形式、または印刷されたひな形が変更された場合にコードを変更する必要があるためです。

最善の方法は、.Net が提供する標準の印刷モデルと、正しいテキストとグラフィックスが配置されるモデルとテンプレートを定義できるレポート ツールを使用し、コードからこれを駆動することです。

Visual Studio には、Crystal Reports のバージョンが同梱されていますが、他にも優れたレポート システムがあり (たとえば、Developer Expressのものを使用しています)、無料のものもあります。

于 2008-10-30T10:31:33.277 に答える
5

私の経験から、同じデータに対して 2 種類のレポートを使用する方が簡単です。

  • エスケープ コードなどを使用するドット マトリックス プリンター用のレポートが 1 つ必要です。このレポートはテキスト ファイルに保存され、さまざまな方法 (type file.txt > lpt1またはコードで既定のプリンターを選択して を使用NOTEPAD /P file.txt)を使用して印刷されます。その他の印刷方法については、このページを参照してください。
  • レポート ビルダー ツール (Crystal Reports、Report ManagerRLIBなど)を使用したレーザー/インクジェット プリンター用の別のレポート

適切な種類のレポートに適切な種類のプリンターを購入することは珍しいことではないため、このアプローチには、顧客が決定できるという利点があります。グラフィック レポート用のレーザー/インクジェット プリンター。

于 2008-10-30T10:59:46.823 に答える
4

C# でエスケープ シーケンスを使用する方法がわかりません。しかし、私はジェネリック/テキストのみのプリンター用のエスケープシーケンスをすべて持っています。それが役に立てば幸い。

一般的な印刷エスケープ シーケンス 1) 行間を設定 a) 1/8 インチ - 27,48 b) 1/6 インチ - 27,50

2) ドラフト品質を選択 a) 27,120,0 / 27,120,48

3) 文字の品質 a) 27,120,1 / 27,120,49

4) ダブルハイト a) 27,119,n i) n = 1 オン ii) n = 0 オフ

5) 双方向印刷 a) 27,85,n i) 0 - 双方向 ii) 1 - 片道

6) 文字スペースを増やす a) 27,32,n (n / 12 インチ増やす)

7) ボールドフォントを選択 a) 27,69

8) ボールドフォントのキャンセル a) 27,70

9) 斜体フォントを選択 a) 27,52

10) 斜体フォントのキャンセル a) 27,53

11) 選択 a) 10cpi 27,8 b) 12cpi 27,77 c) 15cpi 27,103 d) 18cpi 27,103

12) 右マージンを設定する a) 27,81,n

13) 左マージンを設定する a) 27,108,n

14) 用紙送り a) 12

15) 圧縮印刷 a) 0F オン b) 12 オフ

16) ダブルストライク印刷 a) 27,71

17) ストライク印刷のキャンセル a) 27,72

18) 下線 a) 27,45,0 オフ b) 27,45,1 オン

19) ダブル幅 a) 27,84,0 オフ b) 27,84,1 オン

于 2009-02-23T07:46:39.397 に答える
4

最初にシーケンスコマンドを文字に変換してからプリンターに渡します

太字フォントの例 27,69

string.Format("{0}{1}",Convert.ToChar(27),Convert.ToChar(69));

おそらく、次のように少し短くなります。

string.Format("{0}{1}",(char)(27),(char)(69));

于 2009-03-27T08:41:12.413 に答える
1

System.Drawing.Printing名前空間を見てください。

于 2008-10-29T20:10:58.490 に答える
0

プリンタにインストールするドライバがある場合は、通常のWindowsプリントシステムを使用できます。POSプリンターを含むほとんどのプリンターでは、動作するWindowsドライバーを使用できます。(ほとんどのドットマトリックスプリンターはとにかくEpson互換です。)一部のPOSプリンタードライバーでは、エスケープコードをプリンターに直接送信することもできます(特別なフォントを使用)。おそらく、そのような機能は必要ありません。

そうでない場合は、プリンタの追加ウィザードを使用して、汎用/テキストのみのプリンタ(ドライバ)を追加できます。完了したら、特定のコマンド(エスケープシーケンス)を構成できます-フォントサイズ10/12/17、太字のオン/オフ、下線のオン/オフ、ジョブの開始/停止、紙送り、サイズの選択。

FILEポートに関連付けられた汎用プリンターを使用してPOSプリンターのさまざまなレポートをテストしています。テキストファイルを見て、印刷物の数値を検証するのは簡単です。もちろん、特定のプリンタドライバをフォーマットするために必要です。

于 2008-10-29T20:30:48.997 に答える
0

私がやりたいことは不可能のようです。

私が選択した印刷は、管理されていないプリンターへの直接印刷 (winspool.drv を使用) です。これにより、プリンターに対して好きなことを行うことができ、簡単に並べることができます。VB.NET の例または、GDI+ (System.Drawing.Printing) を使用することもできます。これは、整列させるのが複雑ですが、XPS や PDF プリンターなどの非ドット マトリックス プリンターで動作します。

于 2008-10-30T07:28:05.410 に答える