Como recuperar nomes de impressoras em C

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

Saber quais impressoras estão disponíveis em um sistema é um pré-requisito comum para qualquer aplicação .NET que envia documentos para impressão. Se o objetivo é permitir que os usuários escolham uma impressora em um menu suspenso ou direcionar trabalhos de impressão para um dispositivo específico automaticamente, obter os nomes das impressoras programaticamente é o primeiro passo.

IronPrint expõe um único método estático — Printer.GetPrinterNames() — que retorna todas as impressoras instaladas na máquina Windows atual como um List<string>. Cobrimos a instalação, recuperação síncrona e assíncrona, e como inserir um nome de impressora selecionado em um trabalho de impressão abaixo.

Início Rápido: Recuperar Nomes de Impressoras

  1. Instale o IronPrint via NuGet: Install-Package IronPrint
  2. Adicione using IronPrint; ao arquivo
  3. Ligue para Printer.GetPrinterNames() para obter uma lista de nomes de impressoras List<string>
  4. Itere sobre a lista e exiba ou armazene cada nome
  5. Passe o nome selecionado para PrintSettings.PrinterName ao imprimir
  1. Instale IronPrint com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronPrint
  2. Copie e execute este trecho 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. Implante para testar em seu ambiente de produção.

    Comece a usar IronPrint em seu projeto hoje com uma avaliação gratuita

    arrow pointer

Como posso listar todos os nomes de impressoras instaladas?

Printer.GetPrinterNames() consulta o sistema operacional e retorna todas as impressoras registradas como um List<string>. Chamamos este método uma vez e iteramos sobre o 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

Saída do console

Encontrada(s) 3 impressora(s):

  • Microsoft Print to PDF
  • HP LaserJet Pro MFP M428
  • OneNote (Área de Trabalho)

A lista retornada inclui impressoras locais, impressoras de rede e drivers de impressão virtuais. Cada string corresponde exatamente ao nome exibido no painel do Windows Configurações > Impressoras e scanners, então pode ser usado diretamente na configuração de impressão.

Se nenhuma impressora estiver instalada, o método retorna uma lista vazia em vez de lançar uma exceção. Uma rápida verificação de código printerNames.Count é tudo o que é necessário antes de apresentar opções a um usuário.

Como faço para recuperar nomes de impressoras assincronamente?

Para aplicações onde bloquear a thread da interface do usuário não é aceitável — aplicativos web WPF, MAUI ou ASP.NET — o IronPrint fornece Printer.GetPrinterNamesAsync(). O método retorna um Task<List<string>> e funciona de forma idêntica à sua 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;

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

Nós await a chamada da mesma forma que qualquer outra API assíncrona. O resultado é o mesmo List<string> retornado por GetPrinterNames(), portanto, nenhuma análise ou conversão adicional é necessária. Esse padrão assíncrono se integra naturalmente com as ações do controlador e os manipuladores de eventos.

Como faço para imprimir em uma impressora específica por nome?

Assim que tivermos o nome da impressora, atribuímos a PrintSettings.PrinterName e passamos o objeto de configurações para Printer.Print(). Isso envia o documento diretamente para a impressora escolhida sem exibir uma caixa de 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 suporta propriedades adicionais como Dpi, PaperOrientation, Grayscale e PaperMargins. Veja a lista completa na referência API PrintSettings e o guia de como configurar impressões.

Também recuperamos as bandejas de papel disponíveis para uma determinada impressora usando Printer.GetPrinterTrays(printerName) , o que é útil quando um trabalho de impressão precisa puxar papel de uma bandeja específica.

Quais são os meus próximos passos?

Abordamos quatro operações: instalar o IronPrint, listar todos os nomes de impressoras com GetPrinterNames(), executar a mesma consulta de forma assíncrona com GetPrinterNamesAsync() e encaminhar um documento para uma impressora específica através de PrintSettings.PrinterName.

Para mais leitura e exemplos mais profundos, explore estes recursos:

Obtenha uma licença de teste gratuita para testar cada recurso em um ambiente ao vivo, ou veja as opções de licenciamento quando estiver pronto para implantar.

Perguntas frequentes

Qual é a maneira mais fácil de recuperar nomes de impressoras em C#?

A maneira mais fácil de recuperar nomes de impressoras em C# é usando o IronPrint .NET, que permite obter uma lista de impressoras instaladas com uma única chamada de método.

Posso recuperar nomes de impressoras de forma assíncrona usando o IronPrint?

Sim, o IronPrint .NET suporta operações assíncronas, permitindo que você recupere nomes de impressoras sem bloquear o thread principal.

É possível imprimir para uma impressora específica por nome usando o IronPrint?

Absolutamente, o IronPrint .NET permite que você especifique o nome da impressora, para que você possa imprimir documentos diretamente para qualquer impressora instalada de sua escolha.

O IronPrint suporta a recuperação de nomes de impressoras em todas as plataformas .NET?

O IronPrint .NET foi projetado para funcionar com várias plataformas .NET, permitindo que você recupere nomes de impressoras de forma contínua em diferentes ambientes.

Como o IronPrint lida com nomes de impressoras em um ambiente de rede?

O IronPrint .NET pode recuperar nomes de impressoras de impressoras locais e de rede, tornando-o versátil para uso em diferentes configurações de rede.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Baixar 41,154 | Versão: 2026.5 just released
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronPrint
executar um exemplo Veja seu documento chegar à impressora.