Программно hello world по умолчанию серверный принтер в ASP.NET MVC

У меня установлен и работает принтер на сервере интрасети, и я хочу программно отправить «hello world» на этот принтер по умолчанию. Это кажется самым простым, но я безуспешно гуглил пару часов. (примечание: я разрабатываю asp.net mvc на самой машине развертывания, на которой работает Windows 7)

Я попытался перевести пример из VB здесь на С#, но пишет "принтеры не установлены".

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();
}

person Benjamin    schedule 01.09.2012    source источник
comment
Я ставлю доллар на то, что сервер интрасети отличается от той машины, на которой вы тестируете этот код.   -  person Hans Passant    schedule 01.09.2012
comment
Что я куплю на доллар?   -  person Benjamin    schedule 01.09.2012
comment
@HansPassant, пожалуйста, помогите! Я обещаю вернуть ваш доллар.   -  person Benjamin    schedule 01.09.2012


Ответы (2)


Распечатайте "hello world" на стороне сервера в .NET

  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);
}
person Benjamin    schedule 01.09.2012

Прежде всего дайте возможность выбрать принтер. Все ваши требования уже проиллюстрированы на сайте поддержки 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);
    }
}
person perilbrain    schedule 01.09.2012
comment
Спасибо, я проверяю это. Кстати, я использую Windows 7. - person Benjamin; 01.09.2012
comment
Что такое ShowDialog часть? Я не хочу требовать взаимодействия с пользователем для этого. На самом деле я собираюсь вызвать его из asp.net, когда он заработает. - person Benjamin; 01.09.2012
comment
В случае неудачи вы можете попробовать неуправляемое манипулирование кодом в C# для принтеров. - person perilbrain; 01.09.2012
comment
удалите, если они бесполезны.....msdn .microsoft.com/en-us/library/ — альтернатива диалоговому окну - person perilbrain; 01.09.2012
comment
Как ни странно, я не могу использовать имя System.Window.Forms даже после добавления ссылки. - person Benjamin; 01.09.2012
comment
попробуйте добавить правильную версию, честно говоря, я мало знаю об asp.net и его совместимости с различными сборками - person perilbrain; 01.09.2012
comment
Все равно, спасибо за помощь. Думаю, нужно уточнить вопрос. Я использую asp.net mvc, и asp.net, по-видимому, несовместим с библиотекой форм Windows. - person Benjamin; 01.09.2012