7

プリンターをイントラネット サーバーにインストールして動作させており、その既定のプリンターにプログラムで "hello world" を送信したいと考えています。これは最も簡単なことのように思えますが、数時間グーグルで検索しましたが、成功しませんでした。(注: Windows 7 を実行している展開マシン自体で asp.net mvc を開発しています)

ここで VB の例を C# に翻訳しようとしましたが、「プリンターがインストールされていません」と表示されました。

public void TestPrint()
{
    var x = new PrintDocument();
    x.PrintPage += new PrintPageEventHandler(PrintPage);
    x.Print();
}
private void PrintPage(Object sender, PrintPageEventArgs e)
{
    var textToPrint = "Hello world";
    var printFont = new Font("Courier New", 12);
    var leftMargin = e.MarginBounds.Left;
    var topMargin = e.MarginBounds.Top;
    e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, leftMargin, topMargin);
}

ここで MSDN のスニペットも試してみましたが、プリンター名を認識しないと言われました。

public void TestPrint(string msg)
{
    var server = new LocalPrintServer();
    var queue = LocalPrintServer.GetDefaultPrintQueue();

    // Call AddJob
    var job = queue.AddJob();

    // Write a Byte buffer to the JobStream and close the stream
    var stream = job.JobStream;
    var buffer = UnicodeEncoding.Unicode.GetBytes(msg);
    stream.Write(buffer, 0, buffer.Length);
    stream.Close();
}
4

2 に答える 2

10

.NET のサーバー側で「hello world」を出力する

  1. プリンターを共有する
  2. PrintDocumentオブジェクトを作成する
  3. プリンターを名前で参照する
  4. コンテンツを提供するメソッドを追加する
  5. 印刷する

コード

using System.Drawing;
using System.Drawing.Printing;

public void Print()
{
  var doc = new PrintDocument();
  doc.PrinterSettings.PrinterName = "\\\\deployment-machine-name\\share-name";
  doc.PrintPage += new PrintPageEventHandler(ProvideContent);
  doc.Print();
}
public void ProvideContent(object sender, PrintPageEventArgs e)
{
  e.Graphics.DrawString(
    "Hello world",
    new Font("Arial", 12),
    Brushes.Black,
    e.MarginBounds.Left,
    e.MarginBounds.Top);
}
于 2012-09-01T21:07:40.443 に答える
1

まず、プリンタを選択するオプションを提供します。要件全体は、Microsoftサポートサイトにすでに示されています。

こちらをご覧ください。

そこからのサンプル(いつかページが死んだ場合):-

private void print_Click(object sender, System.EventArgs e)
{
    string s = "Hello"; // device-dependent string, need a FormFeed?

    // Allow the user to select a printer.
    PrintDialog pd  = new PrintDialog();
    pd.PrinterSettings = new PrinterSettings();
    if( DialogResult.OK == pd.ShowDialog(this) )
    {
        // Send a printer-specific to the printer.
        RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, s);
    }
}
于 2012-09-01T17:29:54.863 に答える