やってみます。私の推測では、高レベルでうまく機能する一連の印刷用ライブラリを使用していますが、より「手動」のものを使用する必要があります。私の父は喫茶店を経営しており、私は彼の POS ソフトウェアを作成しました。私たちのレシート プリンターは、これから提供するコードに必要な行だけを印刷します。この方法で移動するとうまくいくと思います。
この方法では画像は印刷されず、テキストのみが印刷されます。これは知っておくことが重要です。
私のコードの印刷方法は、あなたのものとは異なるようです。それらは「文字に敏感」です。つまり、3 つのスペースバー ストロークに相当する余白が必要な場合は、3 つのスペースバー ストロークとテキストを記述する必要があります。
このコードを実行するには、'.txt' を作成し、そのテキスト ファイルを引数として印刷クラスに送信する必要があります。C# と VB のどちらを使用しているかはわかりませんが、私のコードは C# です。
したがって、最初に、プログラムの任意の時点でテキストファイルを作成するには、ヘッダーが必要です。
using System.IO;
次に、必要になった時点で、テキストファイルの作成を開始します。
StreamWriter sw = new StreamWriter("receipt.txt");
これにより、.exe がある現在のフォルダーにファイルが作成されます。古いファイルも上書きされるので、同じ名前のファイルが以前に存在していても心配する必要はありません。領収書の行を書くには、次を使用します。
sw.WriteLine(" the text is supposed to be written, you may use concatenations ");
WriteLine メソッドは、テキスト行をファイルに書き込み、次の行に移動します。
書き込みが完了したら、ファイルを閉じる必要があります...
sw.Close();
次に、これから提供する印刷クラスを呼び出す必要があります。すでに持っていると仮定すると、次のようにインスタンスを作成する必要があります。
PimpMyPrint p = new PimpMyPrint();
そして、PrintDoc メソッドを呼び出します...
p.PrintDoc("receipt.txt");
もう一度言いますが、必要なすべてのメソッドを持つクラスが必要です。このクラスの単位を取るつもりはありません。スペイン出身の作家、フランシスコ・ハビエル・セバロスの作品です。Ceballos 氏はスペイン語圏の SD コミュニティで有名な著者であり、これは彼の著書「Microsoft C# Curso de programación」からのものです。
したがって、追加する必要があるクラスは次のとおりです。
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
namespace SomeNamespace
{
class PimpMyPrint
{
private Font font;
private StreamReader sr;
public void PrintDoc(string textfile)
{
try
{
sr = new StreamReader(textfile);
try
{
font = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(this.PrintPage);
pd.Print();
}
finally
{
sr.Close();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private void PrintPage(object obj, PrintPageEventArgs ev)
{
float LinesPerPage = 0;
float pos_Y = 0;
int count = 0;
float marginLeft = ev.MarginBounds.Left;
float marginUP = ev.MarginBounds.Top;
string line = null;
float fontHeight = font.GetHeight(ev.Graphics);
LinesPerPage = ev.MarginBounds.Height / fontHeight;
while (count < LinesPerPage && ((line = sr.ReadLine()) != null))
{
pos_Y = marginUP + (count * fontHeight);
ev.Graphics.DrawString(line, font, Brushes.Black, 0, pos_Y, new StringFormat());
count++;
}
if (line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
}
}
これが私と同じようにあなたにとってもうまくいくことを願っています!