2012-09-01 10 views
7

Tengo la impresora instalada y trabajando en un servidor de intranet y deseo enviar "hello world" a la impresora predeterminada mediante programación. Esto parece ser lo más simple, pero he estado buscando en Google durante un par de horas sin éxito. (nota: estoy desarrollando asp.net mvc en la propia máquina de despliegue que ejecuta Windows 7)Impresora por defecto del lado del servidor de Programmatic "hello world" en ASP.NET MVC

Traté de traducir un ejemplo de VB here a C# pero decía "no hay impresoras instaladas".

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

que también habían intentado un fragmento de MSDN here pero dijo que no reconoce el nombre de la impresora.

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

Voy a poner un dólar en el "servidor de intranet" ser una máquina diferente a la que prueba este código. –

+0

¿Qué voy a comprar con un dólar? – Benjamin

+0

@HansPassant por favor ayuda! Prometo que le devolverá su dinero. – Benjamin

Respuesta

10

Imprimir "hola mundo" del lado del servidor en .NET

  1. Compartir la impresora
  2. Crear un objeto PrintDocument
  3. de referencia de la impresora por su nombre
  4. Añadir un método para proporcionar contenido
  5. Imprimir

Código

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

En primer lugar, ofrezca la opción de seleccionar una impresora. Todo su requisito ya está ilustrado en el sitio de soporte de Microsoft.

Have a look here.

una muestra a partir de ahí (En caso de que algún día la página está muerto): -

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

Gracias, lo estoy viendo. Por cierto, estoy ejecutando Windows 7. – Benjamin

+0

¿Qué es la parte 'ShowDialog'? No quiero requerir interacción del usuario para esto. De hecho, voy a hacer que me llame desde asp.net cuando lo haga funcionar. – Benjamin

+0

Si falla, puede intentar la manipulación de código no administrado en [C# para impresoras] (http://support.microsoft.com/kb/138594) – perilbrain