¿Cómo recuperar nombres de impresoras en C

This article was translated from English: Does it need improvement?
Translated
View the article in English

Saber qué impresoras están disponibles en un sistema es un requisito previo común para cualquier aplicación .NET que envíe documentos a imprimir. Ya sea que el objetivo sea permitir que los usuarios elijan una impresora de una lista desplegable o enrutar trabajos de impresión a un dispositivo específico automáticamente, recuperar nombres de impresoras programáticamente es el primer paso.

IronPrint expone un único método estático — Printer.GetPrinterNames() — que devuelve cada impresora instalada en la máquina actual de Windows como un List<string>. Cubrimos la instalación, recuperación sincrónica y asincrónica, y cómo alimentar un nombre de impresora seleccionado en un trabajo de impresión a continuación.

Inicio rápido: Recuperar nombres de impresoras

  1. Instalar IronPrint a través de NuGet: Install-Package IronPrint
  2. Añadir using IronPrint; al archivo
  3. Llamar a Printer.GetPrinterNames() para obtener un List<string> de nombres de impresoras
  4. Itere sobre la lista y muestre o almacene cada nombre
  5. Pasar un nombre seleccionado a PrintSettings.PrinterName al imprimir
  1. Instala IronPrint con el Administrador de Paquetes NuGet

    PM > Install-Package IronPrint
  2. Copie y ejecute este fragmento de código.

    using IronPrint;
    
    // Retrieve every printer installed on this machine
    List<string> printers = Printer.GetPrinterNames();
    
    foreach (var name in printers)
    {
        Console.WriteLine(name);
    }
  3. Despliegue para probar en su entorno real

    Comienza a usar IronPrint en tu proyecto hoy mismo con una prueba gratuita

    arrow pointer

¿Cómo puedo listar todos los nombres de impresoras instaladas?

Printer.GetPrinterNames() consulta el sistema operativo y devuelve cada impresora registrada como un List<string>. Llamamos a este método una vez e iteramos sobre el resultado:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-list-all-printers.cs
using IronPrint;
using System;
using System.Collections.Generic;

// List every installed printer
List<string> printerNames = Printer.GetPrinterNames();

Console.WriteLine($"Found {printerNames.Count} printer(s):\n");

// Print each printer name
foreach (string name in printerNames)
{
    Console.WriteLine($"  • {name}");
}
Imports IronPrint
Imports System
Imports System.Collections.Generic

' List every installed printer
Dim printerNames As List(Of String) = Printer.GetPrinterNames()

Console.WriteLine($"Found {printerNames.Count} printer(s):" & vbCrLf)

' Print each printer name
For Each name As String In printerNames
    Console.WriteLine($"  • {name}")
Next
$vbLabelText   $csharpLabel

Salida de consola

Encontradas 3 impresora(s):

  • Microsoft Print to PDF
  • HP LaserJet Pro MFP M428
  • OneNote (Escritorio)

La lista devuelta incluye impresoras locales, impresoras de red y controladores de impresión virtual. Cada cadena coincide con el nombre exacto mostrado en el panel de Configuración > Impresoras y escáneres de Windows, por lo que se puede usar directamente en la configuración de impresión.

Si no se han instalado impresoras, el método devuelve una lista vacía en lugar de lanzar una excepción. Una rápida verificación con printerNames.Count es todo lo necesario antes de presentar opciones a un usuario.

¿Cómo puedo recuperar nombres de impresoras de forma asincrónica?

Para aplicaciones donde bloquear el hilo de la interfaz de usuario no es aceptable — WPF, MAUI, o aplicaciones web ASP.NET — IronPrint proporciona Printer.GetPrinterNamesAsync(). El método devuelve un Task<List<string>> y funciona de manera idéntica a su contraparte sincrónica:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-async-printer-names.cs
using IronPrint;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

// Retrieve printer names asynchronously
List<string> printerNames = await Printer.GetPrinterNamesAsync();

// Print each printer name
foreach (string name in printerNames)
{
    Console.WriteLine(name);
}
Imports IronPrint
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

' Retrieve printer names asynchronously
Dim printerNames As List(Of String) = Await Printer.GetPrinterNamesAsync()

' Print each printer name
For Each name As String In printerNames
    Console.WriteLine(name)
Next
$vbLabelText   $csharpLabel

Hacemos await la llamada como cualquier otra API asincrónica. El resultado es el mismo List<string> devuelto por GetPrinterNames(), por lo que no es necesario un análisis o conversión adicional. Este patrón asincrónico se integra naturalmente con async Task acciones del controlador y async void controladores de eventos.

¿Cómo imprimo en una impresora específica por nombre?

Una vez que tenemos el nombre de la impresora, lo asignamos a PrintSettings.PrinterName y pasamos el objeto de configuración a Printer.Print(). Esto envía el documento directamente a la impresora elegida sin mostrar un diálogo:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-print-to-specific-printer.cs
using IronPrint;
using System.Collections.Generic;

// Retrieve available printers
List<string> printers = Printer.GetPrinterNames();

// Select a printer matching "LaserJet", or fall back to the first available
string targetPrinter = printers.Find(p => p.Contains("LaserJet"))
                       ?? printers[0];

// Configure print settings
PrintSettings settings = new PrintSettings
{
    PrinterName = targetPrinter,
    PaperSize = PaperSize.A4,
    NumberOfCopies = 1
};

// Print the document
Printer.Print("invoice.pdf", settings);
Imports IronPrint
Imports System.Collections.Generic

' Retrieve available printers
Dim printers As List(Of String) = Printer.GetPrinterNames()

' Select a printer matching "LaserJet", or fall back to the first available
Dim targetPrinter As String = printers.Find(Function(p) p.Contains("LaserJet")) _
                       OrElse printers(0)

' Configure print settings
Dim settings As New PrintSettings With {
    .PrinterName = targetPrinter,
    .PaperSize = PaperSize.A4,
    .NumberOfCopies = 1
}

' Print the document
Printer.Print("invoice.pdf", settings)
$vbLabelText   $csharpLabel

PrintSettings admite propiedades adicionales como Dpi, PaperOrientation, Grayscale y PaperMargins. Vea la lista completa en la referencia de la API PrintSettings y la guía de configuraciones de impresión.

También recuperamos las bandejas de papel disponibles para una impresora dada usando Printer.GetPrinterTrays(printerName), lo cual es útil cuando un trabajo de impresión necesita obtener papel de una bandeja específica.

¿Cuales son mis próximos pasos?

Cubrieron cuatro operaciones: instalar IronPrint, listar todos los nombres de impresoras con GetPrinterNames(), ejecutar la misma consulta de manera asincrónica con GetPrinterNamesAsync() y direccionar un documento a una impresora específica a través de PrintSettings.PrinterName.

Para más lecturas y ejemplos más profundos, explore estos recursos:

Obtenga una licencia de prueba gratuita para probar todas las características en un entorno en vivo, o vea las opciones de licencia cuando esté listo para implementar.

Preguntas Frecuentes

¿Cuál es la manera más fácil de recuperar nombres de impresoras en C#?

La manera más fácil de recuperar nombres de impresoras en C# es usando IronPrint .NET, lo que te permite obtener una lista de impresoras instaladas con una sola llamada de método.

¿Puedo recuperar nombres de impresoras de manera asíncrona usando IronPrint?

Sí, IronPrint .NET admite operaciones asíncronas, permitiéndote recuperar nombres de impresoras sin bloquear el hilo principal.

¿Es posible imprimir en una impresora específica por nombre usando IronPrint?

Absolutamente, IronPrint .NET te permite especificar el nombre de la impresora, por lo que puedes imprimir documentos directamente en cualquier impresora instalada de tu elección.

¿IronPrint admite la recuperación de nombres de impresora en todas las plataformas .NET?

IronPrint .NET está diseñado para trabajar con varias plataformas .NET, lo que te permite recuperar nombres de impresoras sin problemas en diferentes entornos.

¿Cómo maneja IronPrint los nombres de impresoras en un entorno de red?

IronPrint .NET puede recuperar nombres de impresoras tanto de impresoras locales como de red, haciéndolo versátil para usarse en diferentes configuraciones de red.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 41,154 | Versión: 2026.5 just released
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronPrint
ejecuta una muestra observa cómo tu documento llega a la impresora.