質問

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

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

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

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

役に立ちましたか?

解決

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

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

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

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

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

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

Visual StudioにはCrystal Reportsのバージョンが付属していますが、他にも優れたレポートシステムがあります( developer express など)、それらの一部は無料です。

他のヒント

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

  • エスケープコードなどを使用するドットマトリックスプリンター用の1つのレポートが必要です。これはテキストファイルに保存され、さまざまな方法( type file.txt> lpt1 またはコードで選択して印刷されます)デフォルトのプリンターで NOTEPAD / P file.txt を使用))-このページより多くの印刷方法。
  • レポートビルダーツールを使用したレーザー/インクジェットプリンター用の別のレポート(Crystal Reports、レポートマネージャー、< a href = "http://rlib.sicompos.com/" rel = "nofollow noreferrer"> RLIB または利用可能なものすべて

適切な種類のレポート用に適切な種類のプリンターを購入することは珍しいことではないため、このアプローチには、顧客が決定できるという利点があります:A3 / A4用紙形式のテキストレポート用のドットマトリックスプリンター(通常は会計用部門)またはグラフィカルレポート用のレーザー/インクジェットプリンター。

iは、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オン

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

太字フォント27,69の例

string.Format(&quot; {0} {1}&quot;、Convert.ToChar(27)、Convert.ToChar(69));

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

string.Format(&quot; {0} {1}&quot;、(char)(27)、(char)(69));

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

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

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

私がやりたいことはできないようです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top