2012-09-01 18 views
7

Ho la stampante installata e funzionante su un server intranet e voglio inviare "Ciao mondo" a quella stampante predefinita. Questa sembra la cosa più semplice ma sono stato googling per un paio d'ore senza successo. (nota: sto sviluppando asp.net mvc sulla macchina di distribuzione stessa che esegue Windows 7)Stampante lato server predefinita "Hello World" in ASP.NET MVC

Ho provato a tradurre un esempio da VB here in C# ma diceva "nessuna stampante è installata".

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

avevo anche provato un frammento da MSDN here ma ha detto che non ha riconosciuto il nome della stampante.

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

Metterò un dollaro sul "server intranet" essere macchina diversa da quella su cui viene testato questo codice. –

+0

Cosa comprerò con un dollaro? – Benjamin

+0

@HansPassant per favore aiuto! Prometto che restituirò il tuo dollaro. – Benjamin

risposta

10

stampa "ciao mondo" server-side in .NET

  1. Condividi la stampante
  2. Creare un oggetto PrintDocument
  3. riferimento alla stampante in base al nome
  4. Aggiungere un metodo per fornire contenuti
  5. Stampa

Codice

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

Prima di tutto fornire un'opzione per selezionare una stampante. Il tuo intero requisito è già illustrato sul sito di supporto Microsoft.

Have a look here.

Un campione da lì (Nel caso in cui un giorno pagina è morto): -

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); 
    } 
} 
+0

Grazie, lo sto verificando. A proposito, sto utilizzando Windows 7. – Benjamin

+0

Che cos'è la parte 'ShowDialog'? Non voglio richiedere l'interazione dell'utente per questo. In effetti, lo chiamerò da asp.net quando funzionerò. – Benjamin

+0

Se non si riesce, è possibile provare la manipolazione del codice non gestito in [C# per stampanti] (http://support.microsoft.com/kb/138594) – perilbrain