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 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

  1. Instalar IronPrint vía 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. Iterar sobre la lista y mostrar o almacenar 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;

// 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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:

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.

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 38,930 | Versión: 2026.4 recién lanzado
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.