Cómo recuperar nombres de impresoras en C
Saber qué impresoras están disponibles en un sistema es un requisito común para cualquier aplicación .NET que necesite imprimir documento de forma programática. Ya sea que el objetivo sea permitir que los usuarios seleccionen una impresora de un menú 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 actual máquina Windows como un List<string>. Cubrimos la instalación, recuperación síncrona y asíncrona, 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
- Instalar IronPrint vía NuGet:
Install-Package IronPrint - Añadir
using IronPrint;al archivo - Llamar a
Printer.GetPrinterNames()para obtener unList<string>de nombres de impresoras - Iterar sobre la lista y mostrar o almacenar cada nombre
- Pasar un nombre seleccionado a
PrintSettings.PrinterNameal imprimir
-
Instala IronPrint con el Administrador de Paquetes NuGet
PM > Install-Package IronPrint -
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); } -
Despliegue para probar en su entorno real
Comienza a usar IronPrint en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (5 pasos)
- Instala la biblioteca de impresión IronPrint de C#
- Llamar a `Printer.GetPrinterNames()`
- Iterar sobre el `List
` devuelto - Asignar un nombre a `PrintSettings.PrinterName` para dirigir a esa impresora
- Pasar la configuración configurada a `Printer.Print()` para imprimir
¿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;
// Get every printer registered on this Windows machine
List<string> printerNames = Printer.GetPrinterNames();
Console.WriteLine($"Found {printerNames.Count} printer(s):\n");
foreach (string name in printerNames)
{
Console.WriteLine($" • {name}");
}
Imports IronPrint
Imports System
Imports System.Collections.Generic
' Get every printer registered on this Windows machine
Dim printerNames As List(Of String) = Printer.GetPrinterNames()
Console.WriteLine($"Found {printerNames.Count} printer(s):" & vbCrLf)
For Each name As String In printerNames
Console.WriteLine($" • {name}")
Next
Salida de consola
Se encontraron 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 puede usarse directamente en la configuración de impresión.
Si no hay impresoras instaladas, el método devuelve una lista vacía en lugar de lanzar una excepción. Una rápida verificación printerNames.Count es todo lo que se necesita antes de presentar opciones a un usuario.
¿Cómo recupero nombres de impresoras asincrónicamente?
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 síncrona:
: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;
// Await the async call to avoid blocking the UI thread
List<string> printerNames = await Printer.GetPrinterNamesAsync();
foreach (string name in printerNames)
{
Console.WriteLine(name);
}
Imports IronPrint
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks
' Await the async call to avoid blocking the UI thread
Dim printerNames As List(Of String) = Await Printer.GetPrinterNamesAsync()
For Each name As String In printerNames
Console.WriteLine(name)
Next
Nosotros 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 acciones de controlador async Task y manejadores de eventos async void.
¿Cómo imprimo en una impresora específica por su 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;
// Step 1 — Retrieve available printers
List<string> printers = Printer.GetPrinterNames();
// Step 2 — Select a printer (first match containing "LaserJet" as an example)
string targetPrinter = printers.Find(p => p.Contains("LaserJet"))
?? printers[0]; // fallback to first available
// Step 3 — Configure print settings
PrintSettings settings = new PrintSettings
{
PrinterName = targetPrinter,
PaperSize = PaperSize.A4,
NumberOfCopies = 1
};
// Step 4 — Print the document
Printer.Print("invoice.pdf", settings);
Imports IronPrint
Imports System.Collections.Generic
' Step 1 — Retrieve available printers
Dim printers As List(Of String) = Printer.GetPrinterNames()
' Step 2 — Select a printer (first match containing "LaserJet" as an example)
Dim targetPrinter As String = printers.Find(Function(p) p.Contains("LaserJet")) _
OrElse printers(0) ' fallback to first available
' Step 3 — Configure print settings
Dim settings As New PrintSettings With {
.PrinterName = targetPrinter,
.PaperSize = PaperSize.A4,
.NumberOfCopies = 1
}
' Step 4 — Print the document
Printer.Print("invoice.pdf", settings)
PrintSettings admite propiedades adicionales como Dpi, PaperOrientation, Grayscale, y PaperMargins. Vea la lista completa en la referencia API de PrintSettings y la guía de cómo configurar la impresión.
También recuperamos bandejas de papel disponibles para una impresora dada usando Printer.GetPrinterTrays(printerName), lo cual es útil cuando un trabajo de impresión necesita extraer papel de una bandeja específica.
¿Cuales son mis próximos pasos?
Cubrimos cuatro operaciones: instalar IronPrint, listar todos los nombres de impresoras con GetPrinterNames(), ejecutar la misma consulta asincrónicamente con GetPrinterNamesAsync(), y enrutar 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:
- Tutoriales de IronPrint — Imprimir Documento para recorridos completos de impresión.
- Guía de configuración de impresión para configurar DPI, márgenes, orientación y más.
- Referencia API de la clase Printer para la lista completa de métodos estáticos.
Obtenga una licencia de prueba gratuita para probar todas las funciones en un entorno en vivo, o vea las opciones de licencias cuando esté listo para desplegar.

