Jak pobrać nazwy drukarek w języku C

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

Znajomość drukarek dostępnych w systemie jest częstym warunkiem wstępnym dla każdej aplikacji .NET, która wysyła dokumenty do druku. Niezależnie od tego, czy celem jest umożliwienie użytkownikom wyboru drukarki z listy rozwijanej, czy automatyczne kierowanie zadań drukowania do określonego urządzenia, pierwszym krokiem jest programowe pobranie nazw drukarek.

IronPrint udostępnia jedną metodę statyczną — Printer.GetPrinterNames() — która zwraca wszystkie zainstalowane drukarki na bieżącym komputerze z systemem Windows jako List<string>. Poniżej omówimy instalację, pobieranie synchroniczne i asynchroniczne oraz sposób podania nazwy wybranej drukarki w zadaniu drukowania.

Szybki start: Pobieranie nazw drukarek

  1. Zainstaluj IronPrint za pomocą NuGet: Install-Package IronPrint
  2. Dodaj using IronPrint; do pliku
  3. Wywołaj Printer.GetPrinterNames(), aby uzyskać List<string> nazw drukarek
  4. Iteruj po liście i wyświetlaj lub zapisuj każdą nazwę
  5. Podczas drukowania przekaż wybraną nazwę do PrintSettings.PrinterName
  1. Install IronPrint with NuGet Package Manager

    PM > Install-Package IronPrint
  2. Skopiuj i uruchom ten fragment kodu.

    using IronPrint;
    
    // Retrieve every printer installed on this machine
    List<string> printers = Printer.GetPrinterNames();
    
    foreach (var name in printers)
    {
        Console.WriteLine(name);
    }
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPrint w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jak mogę wylistować wszystkie zainstalowane nazwy drukarek?

Printer.GetPrinterNames() wysyła zapytanie do systemu operacyjnego i zwraca każdą zarejestrowaną drukarkę jako List<string>. Wywołujemy tę metodę raz i iterujemy po wyniku:

: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

Wynik konsoli

Znaleziono 3 drukarki:

  • Microsoft Print to PDF
  • HP LaserJet Pro MFP M428
  • OneNote (wersja na komputery stacjonarne)

Zwrócona lista zawiera drukarki lokalne, sieciowe i wirtualne sterowniki druku. Każdy łańcuch znaków odpowiada dokładnej nazwie pokazanej w panelu Windows Ustawienia > Drukarki i skanery, więc może być używany bezpośrednio w konfiguracji ustawień druku.

Jeśli nie ma zainstalowanych drukarek, metoda zwraca pustą listę zamiast rzucać wyjątek. Wystarczy szybkie sprawdzenie printerNames.Count przed przedstawieniem opcji użytkownikowi.

Jak mogę pobrać nazwy drukarek asynchronicznie?

W przypadku aplikacji, w których blokowanie wątku interfejsu użytkownika jest niedopuszczalne — WPF, MAUI lub aplikacje internetowe ASP.NET — IronPrint zapewnia Printer.GetPrinterNamesAsync(). Metoda zwraca Task<List<string>> i działa identycznie jak jej synchroniczny odpowiednik:

: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

Wywołujemy await tak samo, jak każde inne asynchroniczne API. Wynik jest taki sam List<string> zwracany przez GetPrinterNames(), więc nie jest konieczne dodatkowe parsowanie ani konwersja. Ten wzorzec asynchroniczny w naturalny sposób integruje się z akcjami kontrolera async Task i procedurami obsługi zdarzeń async void.

Jak mogę wydrukować na konkretną drukarkę według nazwy?

Gdy mamy już nazwę drukarki, przypisujemy ją do PrintSettings.PrinterName i przekazujemy obiekt ustawień do Printer.Print(). To wysyła dokument bezpośrednio do wybranej drukarki bez wyświetlania dialogu:

: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 obsługuje dodatkowe właściwości, takie jak Dpi, PaperOrientation, Grayscale i PaperMargins. Zobacz pełną listę w dokumentacja API PrintSettings oraz przewodnik konfiguracji ustawień druku.

Pobieramy również informacje o dostępnych tacach papieru dla danej drukarki za pomocą Printer.GetPrinterTrays(printerName), co jest przydatne, gdy zadanie drukowania wymaga pobrania papieru z konkretnej tacy.

Jakie są moje kolejne kroki?

Omówiliśmy cztery operacje: instalację IronPrint, wyświetlenie listy wszystkich nazw drukarek za pomocą GetPrinterNames(), asynchroniczne wykonanie tego samego zapytania za pomocą GetPrinterNamesAsync() oraz skierowanie dokumentu do konkretnej drukarki za pomocą PrintSettings.PrinterName.

Dla dalszego czytania i głębszych przykładów, eksploruj te zasoby:

Samouczki IronPrint — Drukuj Dokument dla pełnego przewodnika po drukowaniu.

Uzyskaj bezpłatną licencję próbną, aby przetestować każdą funkcję w rzeczywistym środowisku, lub zobacz opcje licencyjne, gdy będziesz gotowy do wdrożenia.

Często Zadawane Pytania

Jaki jest najłatwiejszy sposób na pobranie nazw drukarek w C#?

Najłatwiejszym sposobem na pobranie nazw drukarek w C# jest użycie IronPrint .NET, które pozwala uzyskać listę zainstalowanych drukarek za pomocą jednego wywołania metody.

Czy mogę asynchronicznie pobrać nazwy drukarek używając IronPrint?

Tak, IronPrint .NET obsługuje operacje asynchroniczne, umożliwiając pobieranie nazw drukarek bez blokowania głównego wątku.

Czy możliwe jest drukowanie na konkretną drukarkę po nazwie za pomocą IronPrint?

Zdecydowanie, IronPrint .NET pozwala na określenie nazwy drukarki, dzięki czemu można drukować dokumenty bezpośrednio na dowolnej zainstalowanej drukarce wybranej przez użytkownika.

Czy IronPrint obsługuje pobieranie nazw drukarek na wszystkich platformach .NET?

IronPrint .NET jest zaprojektowany, aby działać z różnymi platformami .NET, umożliwiając płynne pobieranie nazw drukarek w różnych środowiskach.

Jak IronPrint obsługuje nazwy drukarek w środowisku sieciowym?

IronPrint .NET może pobierać nazwy drukarek zarówno z drukarek lokalnych, jak i sieciowych, co czyni go wszechstronnym narzędziem do użycia w różnych konfiguracjach sieciowych.

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'name'

Filename: sections/author_component.php

Line Number: 18

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 18
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

k

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'title'

Filename: sections/author_component.php

Line Number: 38

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 38
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

k

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'comment'

Filename: sections/author_component.php

Line Number: 48

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 48
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

k
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 41,154 | Wersja: 2026.5 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPrint
uruchom próbkę obserwuj, jak twój dokument trafia do drukarki.