私は C# でラベル プリンター用のプリンター SDK を使用しています。詳細については、次を参照してください。
https://stackoverflow.com/questions/18083309/getting-a-printer-api-to-work-with-c-sharp
そこで与えられたアドバイスを受けて、PInvoke を使用して DLL 内の関数を機能させました。驚いたことに、すべてがまとまり始めました...ほとんどの場合。
関数 SlpDrawTextXY() は、Hfont タイプのフォントの引数を取ることができるはずです。これは、SlpCreateFont() という関数によって作成できます。(これらのメソッドの詳細は、ドキュメントのそれぞれ 21 ページと 19 ページにあります)。
さて、Hfont が実際に何であるかを発見する私の探求はうまくいきませんでした。MSDN はそれについて少し言及していますが、それが正確に何であるかを実際には教えてくれません。提供されている記事は、あなたが盲目である場合にはあまり役に立ちません. それに関する他のドキュメントは非常にスリムで、一体何が起こっているのか推測するしかありません。
次のようなコード ブロックがあります。
public partial class Form1 : Form
{
[DllImport("SlpApi7x32.dll")]
static extern void SlpDebugMode(int nMode);
[DllImport("SlpApi7x32.dll")]
static extern int SlpOpenPrinter(String strPrinterName, int nID, bool fPortrait);
[DllImport("SlpApi7x32.dll")]
static extern void SlpClosePrinter();
[DllImport("SlpApi7x32.dll")]
static extern bool SlpStartLabel();
[DllImport("SlpApi7x32.dll")]
static extern void SlpDrawTextXY(int x, int y, Font iFont, String lpText);
[DllImport("SlpApi7x32.dll")]
static extern bool SlpEndLabel();
[DllImport("SlpApi7x32.dll")]
static extern Font SlpCreateFont(String lpName, int nPoints, int nAttributes);
[DllImport("GDI32.dll")]
public static extern bool DeleteObject(IntPtr objectHandle);
public Form1()
{
InitializeComponent();
}
private void print_Click(object sender, EventArgs e)
{
//Font myFont = new Font("Arial", 12);
//IntPtr hFont = myFont.ToHfont();
SlpDebugMode(2);
SlpOpenPrinter("Smart Label Printer 440", 1, false);
{
SlpStartLabel();
//Font font = SlpCreateFont("Courier", 12, 0);
SlpDrawTextXY(30, 30, null, "Hello World!");
SlpEndLabel();
}
SlpClosePrinter();
}
}
コメントアウトされた私のいじり回しの名残がいくつかあります。コメントアウトされている場合、機能しません。
このコードは実際にプリンターに送られ、空白のラベルを「印刷」するので、私は本当に近いように思えます. SlpDrawTextXY の 3 番目の引数は、フォントがあるべき場所であり、それを正常に通過できるかどうかを確認するために「null」に設定しています。このコードは、ドキュメントの 12 ページのサンプル C コードに基づいています。このコードを、実際にテキストを出力するコードに変換できるようにしたいと考えています。